22. 포인터 (2)

P4·2023년 6월 15일
0
post-thumbnail

포인터

  • 포인터 변수의 타입이 뭐든 포인터 변수의 크기 자체는 다 같음 short* asdint* asd든... 크기가 다 같음

  • 32비트 운영체제 포인터변수 크기는 4바이트, 64비트 포인터변수 크기는 8바이트

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
	char* pChar = nullptr;
	short* pShort = nullptr;

	printf("%zd\n", sizeof(int*)); // zd는 size_t타입을 받기위한 형태
	
	return 0;
}
  • 이걸 실행하면 8이 나오는걸 잘 알수있음

포인터의 주소 연산

  • int 포인터 변수에 += 1 (iPtr += 1) 을 하면 100번지가 101번지가 되는게 아니라 104번지가 됨

  • 이 이유는? --> int 포인터 변수한테 1만큼 증가시키라는건 정말 주소값에 1을 더하라는 것이 아니라 다음 int의 위치로 가라는 것이기 때문

  • char 포인터 변수에 1을 더하면? --> 이건 이제 1byte만큼 증가함, char은 1바이트기 때문


포인터 배열

  • 배열의 원소들의 메모리 주소는 연속적인 구조이다

  • 배열의 이름은 배열의 시작주소이다

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
	char* pChar = nullptr;
	short* pShort = nullptr;

	printf("%zd\n", sizeof(int*));

	int iArr[10] = { 1, 2, 3 };

	printf("%d\n", *(iArr + 1)); // 4바이트만큼 뜀
	printf("%d\n", *(iArr + 2)); // 8바이트만큼 뜀
	
	return 0;
}
  • 여기서 iArr[1] = *(iArr + 1)
profile
지식을 담습니다.

0개의 댓글