구조체
- 나만의 구조가 담긴 자료형을 만들어 보는 것.
형식
// 만들기
struct 구조체이름{
이것 저것 넣을 멤버들;
...
};
...
// 사용하기
struct 구조체이름 변수이름; //(변수, 리스트, 등등 다가능)
예제
- 예제 1) 책 구조체, char 배열을 String처럼 사용.
char copy_str(char *dest, const char *src);
struct Books{
char name[30];
char auth[30];
char publ[30];
int borrowed;
};
int main(){
struct Books Harry2;
puts("-------- Harry2 --------");
printf("책이름 : %s, \n", Harry2.name);
printf("저자 : %s \n", Harry2.auth);
printf("출판사 : %s \n", Harry2.publ);
return 0;
}
char copy_str(char *dest, const char *src){
// 문자열 상수에 문자가 NULL이 나올때 까지 반복
while (*src){
// 구조체 멤버에 문자가 하나씩 들어간다.
*dest = *src;
// 각 주소들을 한칸씩 움직인다.
src++;
dest++;
}
// 구조체 멤버변수를 문자열화 하려고 마지막 NULL 삽입
*dest = '\0';
// 함수 정상 종료, 인자 존재함
return 1;
}
구조체 포인터
- 구조체를 가리키는 포인터
- 포인터는 포인터다.
- 구조체 형으로 포인터변수를 선언한 것이기 때문에,
그 구조체에 맞는 주소그릇이 하나 생긴것. 그게 전부
- (구조체포인터변수).멤버 = 구조체포인터변수 -> 멤버
형식
// 구조체 선언
struct test st;
// 구조체 포인터 선언
struct test *ptr;
// 구조체 포인터에 구조체 주소 할당
ptr = &st;
// 구조체 포인터로 멤버변수 접근
(*ptr).a = 1;
ptr->b = 2;
참고
- 예제코드
- 씹어먹는 C언어
- 코딩도장 배엻형태로 문자열 선언
- '이미 선언된' 배열에 "리터럴"을 넣을 수 는 없다. ( 선언할때 바로 넣어주던가 해야함 )
- 배열 한칸한칸 {리,터,럴,\0} 이런식으로 넣어줘야하는데 코드로 해결가능.
- Hint : While문으로 붙여넣을 문자열이 Null이 될때까지 한칸씩 넣어준다.(배열의 크기를 확인하는 예외사항도 넣어줘야함)
- 리턴값에 대한 의미
- 0 : 정상종료
- 1 : 정상종료, 현재 함수에 인자있음
- -1 : 에러발생
- -2이하 : 에러발생, 구제적 에러코드