[C] 구조체 1. 구조체와 구조체포인터

Sireal·2022년 1월 5일
0

C

목록 보기
6/12

구조체

  • 나만의 구조가 담긴 자료형을 만들어 보는 것.

형식

// 만들기
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이하 : 에러발생, 구제적 에러코드
profile
🚄계속 앞으로🚄

0개의 댓글