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= {
    {15234556},
    {34527623},
    {43629184},
  };

  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를 사용한다.

+ Recent posts