포인터 변수의 값은 32비트일땐 메모리 주소가 32비트라서 4바이트 크기를 가지는 것이기에
64비트로 가면 8바이트를 사용합니다.
포인터 변수에 붙는 더하기 기호는 단순히 값을 더하는 것이 아니기에 4바이트씩 더해지는 것이 아니라 포인터 변수 타입에 의해서 달라집니다.
+n일경우 (n*sizeof(포인터가 가리키는 타입))만큼 값이 더해지죠
struct st_str(
char str[512];
};
st_str *p = NULL; // p=0, c에서 널은 보통 0임으로
p = p+1; // p+1은 p + sizeof(st_str)한 값이 됨으로
을 하게 되면
p의 값은 512가 됩니다.
포인터 변수의 값은 printf("%d", p)뭐 이렇게 해서 직접 나타나게 할수 있습니다. 직접 해보세요.
붕붕이 님이 쓰신 글 :
: 그러면 포인트는 현재 항상 4바이트의 크기를 같는다는게 어떤 자료형태이든 그 포인트 변수주소값 크기는 4바이트 할당되는게 아닌가요?
: p+1은 그 포인트 변수에 4바이트를 건너뛰는거아니가요.? 좀 핵갈리네요 . . .
: 주누 님이 쓰신 글 :
: : 포인터 변수 p를 가정할때 p+1은
: : 포인터 변수 p의 타입 (char*, int*)에 따라서 계산 결과가 달라집니다.
: : int *pi;
: : char *pc;
: : 에서 pi+1은 pi의 주소값에 int의 바이트 크기(4)만큼 이동되고
: : pc+1은 pc의 주소값에 char의 바이트크기(1)만큼 이동됩니다.
: : 포인터변수에 +연산은 위처럼 포인터 변수의 타입에 따라서 하는 행동이 달라집니다.
: :
: : *연산자는 뒤의 변수에 저장된 값(메모리주소)으로 메모리에 찾아가 해당 메모리에 저장되어 있는 값을 반환 하는 연산자 입니다.
: :
: : 또는 포인터 변수 생성시나 곱하기로도 사용되지요.
: :
: : 붕붕이 님이 쓰신 글 :
: : : 안녕하세요
: : :
: : : 포인터와 1차 배열 중 포인트는 현재 4바이트 할당인데
: : :
: : : 포인터 변수 p를 가정하고
: : :
: : : p+1은 p가 저장하고있는 주소값에서 4바이트가 이동되는지..
: : :
: : : 아니면 p가 저장하고있는 주소의 변수 자료형 만큼 이동되는지 의문이 들어서요..
: : : ex)
: : : char * p;
: : : char a;
: : : p=a;
: : : 이경우도 포인터 변수는 4byte만큼 할당대자나요
: : :
: : : 근대 (p+1)일때와 *(p+1)일때 차이점좀 알려주실수있을까요?
: : :
: : :
|