int ary[3][4] 다음은 자료형이 int [4]이고 논리적으로 세 개의 일차원 배열을 요소를 갖는 2차원 배열이다. 여기에서 일곱 번째 물리적인 요소의 값에 접근하려면 먼저 포인터 연산을 할 것이기 때문에 정수 연산에 대해 변화하는 주소를 이해해야 한다. ary는 배열의 이름이자 이차원 배열의 첫 번째 부분 배열(ary[0])의 주소를 말한다. 그러므로 ary의 시작 주소를 100이라 가정하고, ary + 1처럼 정수 연산을 하게 되면 ary + 1 == ary + (1 * sizeof(ary[0])) == 100 + 16 == 116 이런 식으로 된다. 여기서 2를 더하면 바로 일곱 번째 요소에 접근할 수 있다고 생각할 수 있지만 (ary + 1) + 2로 하면 같은 원리로 ary + 3이 되어..
포인터
이 때에는 배열의 저장 공간이 할당되지 않으며, 매개변수로 선언된 배열의 이름은 자동으로 포인터 변수오 바뀐다. 형식은 유지한 체 포인터 변수로 변경된다는 의미이다. 컴파일러는 배열명을 자동으로 포인터로 바꾸고 타 함수에서 선언된 배열의 모든 배열 요소를 사용할 수 있도록 포인터 연산을 수행한다. 그리고 타 함수에서 선언된 배열의 크기는 알 수 없으므로 알고 싶다면 따로 반드시 요소의 개수를 인수로 받아야 한다. 정리하면 배열로 매개변수에 선언하면 크기를 생략하든 어떤 수로 적었든 컴파일러가 자동으로 포인터로 변경한다.
1. 주소와 포인터는 상수와 변수 차이와 같다. 1) 포인터는 변수처럼 공간으로도 사용할 수 있지만, 주소는 상수처럼 정해져 있는 값만 사용할 수 있지 공간으로는 사용할 수 없다. 예를 들면 C언어에서 등호(=) 좌측에 공간이 오고, 등호 우측에는 값이 온다. 이때 주소 값 자체는 좌측(L-value)로 올 수 없다. #include int main(void){ int a = 1; int *pa = &a; // 포인터는 변수와 같아서 L-value로 쓰이는 것이 가능하다. &a = 100; // 주소는 상수 값이라 L-value로 쓰이는 것이 불가능하다. return 0; } (위 예시는 보여주기 위함으로 작성한 것이라 실제 컴파일하면 오류를 가져온다) 2) 둘 다 산술 연산자는 사용 가능하다. 2. 포..