반응형
** 절대 이해하려 들지말고 참조형으로만 쓴다 **
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;
두가지 형태로 쓸 수 있다.
반응형
'Basic > C' 카테고리의 다른 글
2차원 배열 동적할당 및 구성 (0) | 2015.10.09 |
---|---|
난해한 포인터들 정리 (0) | 2015.03.07 |
연산자 , 프로토타입 정의 , 기억 클래스, 선행 처리기 (0) | 2015.03.07 |
기본 입출력 함수의 이해 , 데이터 형 (0) | 2015.03.07 |
기본 입출력 함수의 이해 , 데이터 형 (0) | 2015.03.07 |