포인터

· C언어
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이 되어..
· C언어
이 때에는 배열의 저장 공간이 할당되지 않으며, 매개변수로 선언된 배열의 이름은 자동으로 포인터 변수오 바뀐다. 형식은 유지한 체 포인터 변수로 변경된다는 의미이다. 컴파일러는 배열명을 자동으로 포인터로 바꾸고 타 함수에서 선언된 배열의 모든 배열 요소를 사용할 수 있도록 포인터 연산을 수행한다. 그리고 타 함수에서 선언된 배열의 크기는 알 수 없으므로 알고 싶다면 따로 반드시 요소의 개수를 인수로 받아야 한다. 정리하면 배열로 매개변수에 선언하면 크기를 생략하든 어떤 수로 적었든 컴파일러가 자동으로 포인터로 변경한다.
· C언어
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. 포..
jayoon
'포인터' 태그의 글 목록