반응형
포인터 개념에서
*은 주소가 참조하는 값을 의미하고
&는 주소를 의미한다
배열은 기본적으로 포인터(=주소)를 의미하므로 위 배열 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));
}
'컴퓨터 > 컴퓨터' 카테고리의 다른 글
[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 |