포인터 변수의 크기는 운영체제의 bit 수에 따라 달라짐 32bit(4byte) / 64bit(8byte)
NULL, nullptr 키워드를 이용하여 초기화 가능
초기화가 이루어지지 않는 경우, 임의로 저장된 주소의 값에 마음대로 접근해서 변경해버리면, 최악의 상황에는 프로그램 메모리가 꼬여서 프로그램이 날아갈 수 있기 때문에 초기화가 중요!
char *pc = NULL; // char형 변수의 주소 값
int *pi = nullptr; // int형 변수의 주소 값
double *pd; // double형 변수의 주소 값
포인터 변수의 크기가 항상 같지만, 데이터 타입을 선언하는 이유 그 주소값을 찾아갔을 때, 얼만큼 읽어야 할지 알기 위해서!
int a = 10;
int * ptr = &a; // a의 주소를 ptr 포인터 변수에 저장
// ptr(a의 주소)로 가서
// *ptr (그 주소에 해당하는 값을)의 값을 100으로 변경
*ptr = 100;
printf("변경후 a의 값 : %d", a); // 100
ptr(a의 주소)에 해당하는 값 10을 100으로 변경 포인터 변수가 가리키는 주소 값으로 찾아가서 그곳의 value 값을 변경
메모리 주소
#include <stdio.h>
int main(){
int n = 10;
double d = 3.141592;
}
int (4byte) / double (8byte)
포인터 연산
+, - 연산 진행시 포인터의 타입에 따라 결과가 달라짐
ex) int 형 변수0x7ffdc24ae874+1= 0x7ffdc24ae878
int main(){
int arr[] = {1,2,3,4,5,6,7,8,9,10};
for (int i = 0; i < 10; i++){
printf("%x\n", &arr[i]);
}
int* ptr = arr;
for(int i = 0; i < 10; i++){
printf("%d\n", *ptr);
ptr++;
}
}