본문 바로가기

공부/c언어

포인터(c언어)

반응형

포인터

int b=3;

printf("%d", b);과 같은 구문 있다고 하면

b는 컴파일시 어떤 주소값을 나타내는지 컴퓨터가 처리해서 알고 있는 상태임

b에 해당되는 메모리의 주소를 찾아간다

그 메모리 주소 안에 저장되어 있는 내용을 확인하고 가져와서 printf함수에서 사용하게 되는 것

 

 

int b=3;

int *a = &b;

printf("%d", *a);

맨 아래의 *a의 의미

1. a는 컴파일시 어떤 주소값을 나타내는지 컴퓨터가 처리해서 알고 있는 상태

   a에 해당되는 메모리 주소를 찾아감

2. 그 메모리 주소안에 저장되어 있는 내용을 확인하고 가져옴

3. 가져온 값은 주소값을 나타내고 있으므로 그 주소값을 찾아감

4. 그 메모리 주소안에 저장되어 있는 내용을 확인하고 가져옴

 

int tAry[][2] = {{1, 20, 12}, {3, 5, 16}};

tAry == tAry[0](원리대로 생각하면 tAry에는 tAry[0]포인터상수의 주소값이 들어가야하지만 tAry[0][0]의 주소값이 들어가 있음, 그냥 이렇게 생각다고 그냥 외울것!)

 

int a[3];(a=a[0]의 주소값, 주소상수)

*(a+1) == a[1]

*(a(주소상수)+1) ==> a[0]의 주소값에서 int형의 크기만큼 떨어져 있는 다음 배열값

주소상수나 포인터변수는 +, -연산자를 사용시 사용하는 자료형에 해당하는 만큼을 더하거나 뺌

예) int *a;

*(a+1) <- a에 저장되어 있는 주소값 + int형의 크기(4byte)*1로부터 4바이트 안에 저장되어 있는

              숫자를 읽어들임

 

포인터상수는 증감연산자(++, --)와 같이 연산이 불가능

int a[3];

*(a++) =>에러가 나타남

 

 

반응형