pointer

# 주소 값 저장 변수

* : 포인터가 가르키는 대상, 역참조
& : 변수의 시작 주소 값

int a;
int* p;
a = 100;
p = &a;
*p = 200;
printf("%d\n", a); => 200

32bit 체제에서 pointer의 크기는 4bytes(= 32bit) 2^32개의 주소 지정 가능 => 4GB
64bit 체제에서 pointer의 크기는 8bytes(= 64bit) 2^64개의 주소 지정 가능
---
# int* vs char*

int a = 0x12345678;
char* p;
p = (char*)&a; => (char*)를 써주지 않으면 warning이 뜬다.
printf("0x%02x\n", *p);
=> cpu에 데이터가 big-endian으로 저장되느냐 little-endian으로 저장되느냐에 따라
big-endian은 0x12가 출력되고 little-endian은 0x78이 출력된다.

The network is bid-endian.
---
# 다중 pointer

int a;
int* pa;
int** ppa;
a = 100;
p = &a;
ppa = &pa;
**ppa = 200;
printf("%d\n", a); => 200
---
# func pointer

int add(int a, int b)
{
    return a+b;
}

int substract(int a, int b)
{
    return a-b;
}

int (*fp)(int, int);
fp = &add;
re = (*fp)(4, 3); => 7
fp = ⊂
re = (*fp)(4, 3); => 1
---
# void*
포괄형 pointer
int i = 100;
void* p = &i;
*(int*)p = 200;

double d = 3.14;
void* p  = &d;
*(double*)p = 2.13;

void*는 type casting을 하고 역참조 해야한다.

Comments