배열명은 그 자체가 주소를 의미한다.
int temp[3] = {1, 2, 3}; int *temp_p; |
위와 같은 정의가 있을 때,
for(i = 0; i < 3; i++) printf("%d", *(temp + i)); // 1번식 for(i = 0; i <3; i++) printf("%d", *temp++); // 2번식 |
1번식은 문제없이 실행되지만,
2번식은 에러를 발생한다.
배열명 자체에 주소 값 할당은 이루어질 수 없기 때문이다.
배열명은 포인터 변수가 아니라 배열명 자체일 뿐이다.
다음의 코드를 분석해보자.
#include <stdio.h> int main() { int temp[3][2] = {{5, 2}, {4, 1}, {6, 7}}; // 3X2 배열 초기화 int (*temp_p)[2]; int i, j; temp_p = temp; // 포인터 할당 for(i = 0; i < 3; i++) // 포인터 연산만 사용 for(j = 0; j < 2; j++) printf("[%d][%d] %d ", i, j, *(*(temp_p + i) +j)); printf("\n"); for(i = 0; i < 3; i++) // 부분 첨자 사용 for(j = 0; j < 2; j++) printf("[%d][%d] %d ", i, j, *(temp_p[i] + j)); printf("\n"); for(i = 0; i < 3; i++) // 첨자만 사용 for(j = 0; j < 2; j++) printf("[%d][%d] %d ", i, j, temp_p[i][j]); printf("\n"); for(i = 0; i < 3; i++) // 배열 사용 for(j = 0; j < 2; j++) printf("[%d][%d] %d ", i, j, temp[i][j]); printf("\n"); return 0; } |
'정상을향해 > Languages' 카테고리의 다른 글
상속 (Inheritance) (0) | 2013.11.11 |
---|---|
얕은복사와 깊은복사 (0) | 2013.11.11 |
멤버 이니셜라이저를 이용한 멤버 초기화 (0) | 2013.11.11 |
C++에서의 파일분할 (7) | 2013.11.10 |
참조자(Reference)와 함수 (0) | 2013.11.10 |
[C] 포인터 : *의 의미 (0) | 2011.04.16 |