본문 바로가기

컴퓨터/컴퓨터

[C/C++] 포인터 기초 개념 정리

반응형

포인터 개념에서 
*은 주소가 참조하는 값을 의미하고
&는 주소를 의미한다
배열은 기본적으로 포인터(=주소)를 의미하므로 위 배열 arr는
배열의 시작주소를 가르키는 포인터이고 
배열의 첫번째인 &arr[0]은 arr와 같은 값을 의미한다
포인터는 더해줄때마다 그 포인터의 자료형 만큼 더해준다
ex) int * ptr이 있을때 ptr은 int형이기 때문에 ptr에 1씩 더해주면 실제 값은 4씩 증가한다.

#include <stdio.h>

int main() {
	/*
	포인터 개념에서 
	*은 주소가 참조하는 값을 의미하고
	&는 주소를 의미한다
	배열은 기본적으로 포인터(=주소)를 의미하므로 위 배열 arr는
	배열의 시작주소를 가르키는 포인터이고 
	배열의 첫번째인 &arr[0]은 arr와 같은 값을 의미한다
	포인터는 더해줄때마다 그 포인터의 자료형 만큼 더해준다
	ex) int * ptr이 있을때 ptr은 int형이기 때문에 ptr에 1씩 더해주면 실제 값은 4씩 증가한다.
	*/
	int arr[3];
	
	arr[0] = 10;
	arr[1] = 20;
	arr[2] = 30;
	
	printf("int arr[3]\narr[0] = 10;\narr[1] = 20;\narr[2] = 30;\n\n");
		
	printf("arr배열의 시작 주소: %p\n",arr);
	printf("arr[0]의 포인터: %p\n\n",&arr[0]);
	
	printf("&arr[1]: %p\n",&arr[1]);
	printf("&arr[0]+1: %p\n",&arr[0]+1);
	
	printf("int tmp = arr;\n");
	int tmp = arr;
	printf("arr배열의 포인터를 저장한 tmp의 값: 0x%x\n",tmp);
	printf("tmp+4의 값과 &arr[1]: 0x%x, %p\n\n",tmp+4,&arr[1]);
	
	printf("*(int *)tmp: %d\n(int( *)을 이용해 int형 포인터로 형변환후 역참조)\n\n",*(int *)tmp);
	
	printf("arr[0]: %d, arr[1]: %d, arr[2]: %d\n",arr[0],arr[1],arr[2]);
	printf("*(int *)tmp: %d, *(int *)(tmp+4): %d, *(int *)(tmp+8): %d\n",*(int *)tmp,*(int *)(tmp+4),*(int *)(tmp+8));
	printf("*(int *)arr: %d, *(int *)(arr+1): %d, *(int *)(arr+2): %d\n",*(int *)arr,*(int *)(arr+1),*(int *)(arr+2));
}

32비트 컴파일 후 실행결과

'컴퓨터 > 컴퓨터' 카테고리의 다른 글

[WEB] node.js 포트 에러 해결하기  (0) 2021.05.12
[phaser] phaser로 웹게임 만들기  (0) 2021.05.10
[WEB] node.js 서버 열기  (2) 2021.05.09
[WEB] 라즈베리파이 node.js 설치  (0) 2021.05.09
[WEB] URI 개념  (0) 2020.10.27