포인터
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++) =>에러가 나타남