const와 포인터
const라는 키워드는 포인터에 두 가지 방법으로 사용된다. 첫 번째 방법은 상수 객체를 지시하는 포인터를 만드는 것이다. 상수 객체를 지시하는 포인터를 사용하여 그 포인터가 지시하는 값을 변경할 수 없다. 두 번째 벙법은 자신을 상수로 만드는 것이다. 상수 포인터를 사용하여 그 포인터가 지시하는 장소를 변경할 수 없다.
int age = 39;
int sage = 25
const int *pt = &age; // 첫 번째 방법
int * const pt1 = &sage; // 두 번째 방법
*pt = 40; // 잘못된 사용
pt = &sage; // 사용 가능
*pt1 = 40; // 사용가능
pt1 = &age; // 잘못된 사용
다차원 배열
c언어에서는 1차원 배열을 확장시켜 일반화한 다차원 배열을 지원한다. 2차원 배열은 1차원 배열의 각 원소가 배열로 구성된 배열의 배열이다.
code
#include <stdio.h>
int main()
{
int i, j;
int array[3][4] = {
{15, 23, 45, 56},
{34, 52, 76, 23},
{43, 62, 91, 84},
};
for(i = 0 ; i < 3 ; i++)
{
for(j = 0 ; j < 4 ; j++)
{
printf("%d ", array[i][j]);
}
printf("\n");
}
return 0;
}
// 다차원 배열을 보여주는 예제
code
#include <stdio.h>
int main()
{
int a[5] = {};
int b[3][4] = {};
printf("&a[4] = %p\n", &a[4]);
printf("(a + 4) = %p\n\n", (a + 4));
printf("b = %p\n", b);
printf("&b[0][0] = %p\n", &b[0][0]);
printf("&b[1][0] = %p\n", &b[1][0]);
printf("&b[2][0] = %p\n\n", &b[2][0]);
printf("b[0] = %p\n", b[0]);
printf("b[1] = %p\n", b[1]);
printf("b[2] = %p\n\n", b[2]);
printf("(b + 0) = %p\n", (b + 0));
printf("(b + 1) = %p\n", (b + 1));
printf("(b + 2) = %p\n\n", (b + 2));
printf("&a + 1 = %p\n", &a + 1);
return 0;
}
// 다차원 배열 구성 요소들의 의미를 잘 보여주는 예제
* c언어에서는 배열 자체가 인수로 전달될 수 없다. 즉 call by value방법으로 인수 전달은 가능하지 않다. 배열을 함수 인자로 넘길 때는 call by reference를 사용한다.