본문 바로가기
프로그래밍/C

구조체 포인터

by leestun 2020. 8. 11.
반응형

[구조체 포인터]

구조체 포인터
구조체 변수의 주소를 저장하는 포인터

<생성방법>
struct 구조체명 *구조체포인터명;

자료형 *포인터명


//#include <stdio.h>
//
//typedef struct Student {
// int snum;
// char *name;
//}stu;
//int main() {
// stu s1, s2;
s1.snum = 1;
s1.name = "가길동";

stu *ps1 = NULL;
ps1 = &s1;

printf("ps1:%d\n", ps1);
printf("&s1:%d\n", &s1);

printf("s1:%d\n", s1);
printf("*ps1:%d\n", *ps1);

printf("s1.snum:%d\n", s1.snum);
printf("(*ps1).snum:%d\n", (*ps1).snum);

printf("s1.name:%s\n", s1.name);
printf("(*ps1).name:%s\n", (*ps1).name);
printf("ps1->name:%s\n",ps1->name);
ps1->name = "나길동";
printf("s1.name:%s\n", s1.name);
/*printf("1번 학생----\n");
printf("num:%d\n", s1.snum);
printf("name:%s\n", s1.name);
*/
/*s2.snum = 2;
s2.name = "나길동";*/
return 0;
}

구조체 포인터를 생성해서
구조체 변수 내의 값에 접근하기
——————————————-
구조체 포인터 -> 변수내필드명
구조체포인터로 구조체 변수 내 필드에
접근하는 연산

——————————————-
구조체 포인터와 구조체 배열
<실습> 구조체포인터와 배열

//#include <stdio.h>
//
//typedef struct Student {
// int snum;
// char *name;
//}stu;

int main() {
stu *pst = 100;
stu students[2];

students[0].snum = 1;
students[0].name = "가길동";
students[1].snum = 2;
students[1].name = "나길동";

//1. pst의 바이트크기 구하기
printf("sizeof(pst):%d\n", sizeof(pst));
//2. pst+1을 할때의 변화량 보기
printf("pst+1:%d\n", pst + 1);
//3. Student 구조체 바이트 크기 구하기
printf("sizeof(struct Student):%d\n", sizeof(struct Student));
printf("sizeof(stu):%d\n", sizeof(stu));
printf("sizeof(students[0].snum):%d\n", sizeof(students[0].snum));
printf("sizeof(students[0].name):%d\n", sizeof(students[0].name));
pst = &students[0]; //students
printf("pst->snum:%d\n", pst->snum);
printf("pst->name:%s\n", pst->name);
pst++;
printf("pst->snum:%d\n", pst->snum);
printf("pst->name:%s\n", pst->name);

return 0;
}

1.pst의 바이트크기 구하기
4byte
포인터가 저장하는 값의 주소값
->따라서 양의 정수이므로 4byte

2. pst+1을할 때의 변화량 보기
pst의변화량: 8byte

3. Student 구조체 바이트 크기 구하기

구조체의 크기:8byte

반응형

'프로그래밍 > C' 카테고리의 다른 글

공용체  (0) 2020.08.13
구조체 포인터의 동적할당  (0) 2020.08.12
구조체  (0) 2020.08.10
이차원배열의 동적할당  (0) 2020.08.09
동적메모리  (0) 2020.08.05