1 2 3 struct{ char name[20]; }; cs 이렇게 하면 구조체 내부의 문자배열 name[20]에 문자열이 저장된다. 즉, 20바이트의 저장공간이 구조체 내부에 할당된다. 1 2 3 struct{ char *name; }; cs 이렇게 문자형을 가르키는 포인터를 선언하면, 문자열은 문자열 상수들이 모여있는 공간에 저장된다. 구조체 내부에는 포인터 name을 위한 1바이트만 할당되게 된다. 즉, 문자열을 위한 공간이 구조체 내부에는 없다. 문자열을 저장할 수 없다. 어딘가에 문자열이 이미 저장되어있을 경우에만 가르키면서 사용할 수 있다. 1 2 3 4 5 struct student{ char *name; }; struct student s; scanf("%s", s.name); cs 따라..
구조체를 가르키는 포인터 지금까지는 포인터로 변수만을 가르켰다. 포인터는 구조체도 가르킬 수 있다. 구조체 포인터는 다음과 같이 만든다. 1 2 3 4 struct student s = {"2291048", "jin", "4.3"}; struct student *p; p = &s; Colored by Color Scripter cs 구조체 변수 s를 생성하고, student구조체를 가르킬 포인터 p를 만든다. 그리고 포인터 p에 구조체 변수 s의 주소를 넣어준다. 그리고 포인터 p가 가르키는 구조체의 멤버로 접근하려면 1 (*p).number cs 이렇게 '포인터가 가르키는 것'의 멤버 number 혹은 1 p->number cs 간단하게 이렇게 표현해도 된다. 그러면 멤버로 접근하는 간단한 예제를 보자..
포인터 point에 er을 붙인 것이다. pointer을 직역하면 '가르키는 것'이 되는데, 변수의 주소를 가지고 있는 변수이다. 즉, int i = 4이렇게 변수에 데이터를 저장했다고 가정했을때, 포인터는 변수i가 저장되어있는 메모리상 주소를 가진다. 주소 연산자 & 그렇다면 변수의 주소를 어떻게 알 수 있을까? 주소 연산자인 &를 사용하면된다. 간단한 예제를 살펴 보자. 1 2 3 4 5 6 7 8 9 #include int main(void) { int a = 10; printf("%u", &a);//%u는 주소를 십진수로 출력 return 0; } cs 이 예제에선, 변수 a를 선언하고 10을 저장했다. 그렇다면 이 변수 a가 저장되어 있는 메모리상 주소가 있을 것이다. &는 주소 연산자로써 &a..