#include <stdio.h>
int main()
{
int a = 3;
//&(변수) -> 변수가 있는 주소
int arr[2] = { 1,2 };
printf("%p ", &arr+3); //BASEADD+24
printf("%p ", arr+1); //BASEADD+4
//두 값의 차이는 십진수 20
return 0;
}
&arr+3과 arr+1의 주소 값 차이는 십진수 20이 날 것이다.
실제로
전자 : 0x9f5c3afbe0
후자 : 0x9f5c3afbcc
가 나와서 주소 값의 차이는 0x14 (십진수 20)이 나온다!!
arr = &arr[0]의 값을 가리키고 있는 포인터
arr[0] -> int
&arr[0] -> int *
arr+1 일때 1의 의미는 int의 바이트 수 (4)
&arr = arr배열의 주소를 가리키고 있는 포인터
arr -> int[2]
&arr -> int[2]*
&arr+1 일때 1의 의미는 int[2]의 바이트 수 (4*2)
arr는 배열의 첫번째 인자(배열 요소 ex. int)를 가리키는 포인터 => int*
&arr는 해당 배열(ex. int[n])의 포인터 => int[n]*
int*과 int[n]* 자료형의 차이
ptr이 int*라면, ptr+1은 4byte가 더해짐!!!
ptr이 int[3]*라면, ptr+1은 4byte*3가 더해짐!!!
주소 값 자체는 같으나 이걸 arr 배열 요소(int)의 포인터(int*)로 보느냐? 배열 하나 통째를 하나의 값(int[2])으로 보는 포인터(int[2]*)로 보느냐?
'공부 > 이모저모' 카테고리의 다른 글
교착 상태(deadlock) vs 병목 현상(bottle neck) (0) | 2021.11.08 |
---|---|
C언어 배열 시작주소에 연산 (arr+1) 해석 (0) | 2021.10.19 |
행렬의 덧셈과 곱셈 (행렬이란? 행이란 열이란) (0) | 2021.10.18 |
주요 포트번호 및 서비스 정리 (FTP,HTTP,SSH,텔넷,SMTP...) (0) | 2021.10.01 |
정규 표현식 (Regular Expression) (0) | 2021.09.17 |