반응형

** 절대 이해하려 들지말고 참조형으로만 쓴다 ** 


int *x는 "변수 x는 int형 데이터의 포인터" 라는 뜻이다. 

 

 

x[0]가 저장된 곳의 주소 &x[0]또는 x이다.

 

즉, &x[0]와 x의 내용은 같다. 여기서 x의 의미는 프로그램의 전반부에서 선언된 배열 x[]의 시작주소이다.

 

일반적으로 프로그램에서는 후자의 경우를 더 자주 사용하는데, 이미 scanf()에서 처럼 배열 이름은 배열이 저장된 곳의 시작주소이다.

 

이때 배열 이름을 포인터 상수라고 하기도 한다.

 

 

** 중요 **

 

int num[5] = {1,2,3,4,5};

int *pnum;

pnum = num;

 

이때 pnum은 num[0]를 항상 가리킨다.

 

 

 

같은 데이터 형을 갖는 포인터들을 배열로 선언하여 사용할 수 있는데, 이를 포인터 배열이라 한다. 

 

포인터 배열의 정의는 일반적인 배열의 정의와 거의 동일하며, 다만 배열명 앞에 *을 붙임으로써 포인터 배열임을 알리면 된다.

 

char[5] = "good";

char *str = "good";


컴파일러는 문자열 끝에 자동으로 '\0'문자를 붙인다. 아울러 위의 "good" 문자가 겉으로 보기에는 4문자이나 배열의 크기는 5문자 배열로 선언해야 한다.


===================


여러 변수를 합쳐서 하나의 변수로 만드는 구조체 그리고 여러 변수가 함께 같은 메모리를 사용하는 공용체가 있다.

그리고 typedef를 사용하여 표준 변수 유형을 위한 새로운 이름을 생성할 수도 있다.

struct 구조체명{

. . . 

};

struct 구조체명 구조체 변수;

ex)
struct subject math;

또는 

struct 구조체명{                // 구조체의 태그가 된다('구조체명'이)

. . .                                   // 구조체의 멤버가 된다.

}a,b,c;                             // 여기서 구조체의 변수들을 정의 가능하다.



구조체의 요소에 대한 참조 및 대입 시 " 구조체 변수명.요소명"으로 접근하게 된다.

이때 '.'은 구조체 요소 연산자이다.

math.a = 99;
math.name = "홍길동" // 허용되지 않는다.

배열에 값을 할당할 때는 선언 시 이외는 각각의 첨자를 지정하여 값을 할당하거나 또는 strcpy()를 사용하여 문자열을 할당해야 한다.

strcpy(math.name, "홍길동");



. 연산자가 * 연산자보다 우선순위가 높기 때문에 *구조체 포인터.구조체 요소명이라고 언급하면 컴파일 시 에러메시지가 난다.

구조체 포인터명으로 언급된 구조체는 존재하지 않기 때문이다.

그래서 (*pt).x라고 해야되는데 항상 괄호를 치고 하면 번거로우니 pt -> x라고도 해도 된다.

다음 두개는 같은 의미이다. (*pt).x == pt -> x


struct int_st{

int x,y;

} st1, *pst;

void main()
{

pst = &st1;
 (*pst).x = 20;
 printf("(*pst).x = %d \n", (*pst).x);

pst -> y = 20;

 printf("pst -> y = %d", pst->y");

}




데이터형을 다시 정의하는 명령으로 아주 긴 데이터형의 이름을 변경할 때 유용하다.

typedef를 사용하게 되면 기존의 데이터형과 새롭게 정의한 데이터형을 모두 사용할 수 있어서 편리하다.

데이터형의 이름을 명시적으로 사용하거나, 아니면 구조체 같은 경우에는 struct가 붙어서 긴 이름의 경우 줄여서 사용할 수 있다.

struct HUMAN{

int age;
int height;
int weight;

};

typedef struct HUMAN Human; // struct HUMAN을 이제부터 Human으로만 쓰겠다.


또는

typedef struct HUMAN{

int age;
int height;
int weight;

}Human;


두가지 형태로 쓸 수 있다. 


반응형