int a = 30;
int *pnum;
pnum = &a;
int와 같은 포인터의 형은 메모리 공간을 참조하는 기준이 된다.
int라면 지정된 주소를 시작으로 4바이트를 읽어들이면 되고, double일 경우 8바이트를 읽는다.
* 포인터 변수는 선언하고 초기화를 꼭 해야한다.
int *ptr = 0;
int *ptr2 = NULL;
0 과 NULL은 아무 곳도 가르키지 않음을 뜻한다.
배열의 이름은 배열의 시작 주소 값을 의미한다. 그 형태는 값의 저장이 불가능한 상수이다. (주소 값 변경 불가능)
포인터를 배열의 이름처럼 사용할 수 있다.
int arr[3] = {1,2,3};
int *ptr = &arr[0];
ptr[0] == arr[0]
ptr[1] == arr[1]
*(ptr+i) == arr[i]
int형 포인터에 1을 더하면 주소 값 4 증가
int *ptr = 0x0010;
ptr1 = ptr + 1;
ptr1 == 0x0014
변수 형태의 문자열 : str은 그 자체로 abc중 a가 저장된 위치를 가르킨다.
char str[] = " abc"
상수 형태의 문자열 : 문자열 변경 불가
str2는 "abc" 문자열이 저장된 주소를 가르키므로 가르키는 주소가 바뀔 수 있다.
char *str2 = "abc"
str2에는 주소 값이 저장된다. 사실상 printf 함수에서도 문자열 전체가 아닌 주소 값을 전달받는다.
함수의 매개변수를 포인터 변수로 선언한다면 배열을 통째로 넘겨 받을 수 있다. (원래는 배열통째로 못 넘겨줌)
void su(int *param)
{
for(i=0;i<3;i++)
{
print(param[i]);
}
}
int main(void)
{
int arr[3]={1,2,3};
su(arr)
}
'궁금한 지식' 카테고리의 다른 글
MVC, MVP, MVVM 패턴 - (Vue.js를 공부하며) (0) | 2021.01.12 |
---|---|
Vue.js를 공부하며 필요한 자바스크립트 지식들 (0) | 2021.01.11 |
포인터(Pointer) - 2 (0) | 2021.01.08 |
해쉬 테이블(Hash Table) (0) | 2021.01.03 |
API vs 라이브러리 (0) | 2021.01.02 |