(int *) p는 무엇을 의미하나요?


우수 답변

(int *) p 는 주소가 정수를 가리키는 포인터의 유형으로 변수 p에 저장된 값에 대한 명시 적 유형 캐스팅. p가 저장하는 값은 32 비트 (4 바이트) 정수를 저장하는 데 사용되는 4의 첫 번째 바이트의 메모리 주소입니다.

포인터는 는 메모리의 특정 위치 (힙 또는 스택)에 대한 주소 여야합니다. 해당 위치에 저장된 데이터 유형은 무엇이든

일 수 있습니다. span>, 그리고이 표현식에서 우리는 그것이 4 바이트 정수라고 지정 (또는 가정)하고 있습니다.

p의 값은 다른 포인터에 할당되기 전에 형변환 될 수 있습니다.-

int *c = (int *) p;

또는 p가 보유한 주소에 저장된 값을 검색하기 위해 역 참조 될 수 있습니다.-

int c = *((int *) p);

또는 p가 실제로 포인터 자체라면 포인터없이 역 참조 될 수 있습니다. 저장된 값이 4 바이트 정수라는 것을 알고 있기 때문에 명시 적으로 타입 캐스트됩니다.

간단 함을 위해 포인터를 null 검사하지 않았습니다. null 포인터를 역 참조하면 충돌이 발생하므로 포인터가 null인지 확인하는 것이 가장 중요합니다.

null의 예 확인-

if (p != null)

printf(“int is ‘\%d’”, *p);

이제 주소가 정확하고 포인터가 null이 아니며 메모리 위치에 저장된 데이터 유형이 실제로 정수인 경우 콘솔에서 올바르게 인쇄합니다. .

다음은 c- Clockwise / Spiral Rule <에서 포인터를 읽는 방법에 대해 몇 년 전에 살펴본 상세하고 잘 설명 된 기사입니다. / a>

Answer

(int *)가 거기서 무엇을하는지 이해하려면 malloc (sizeof (int))이 무엇을하는지 이해하는 것이 좋습니다. “s break it down right to left.

먼저, sizeof (int)가 있습니다. 메모리에서 정수를 나타내는 데 필요한 바이트 수를 나타내는 값입니다. 이것은 우리가 프로그래밍하는 컴퓨터에 따라 4 또는 다른 숫자가 될 수 있습니다.

따라서 malloc () 함수는 실제로 4, a la malloc (4)와 같은 매개 변수를 얻습니다.이 함수는 C 라이브러리는 메모리 어딘가로 이동하고 4 바이트를 따로 설정합니다 (정수를 포함하기에 정확히 맞는 크기 임).

이제 malloc 함수는 항상 해당 메모리의 주소를 반환합니다. 메모리는 직렬로 배치되고 메모리의 모든 주소는 고유합니다. 이제 malloc ()은 매우 똑똑한 함수가 아닙니다. 원하는 메모리 양을 알려주고 “여기 있습니다”라고 표시합니다. 당신은 그 메모리에 넣기를 원합니다-그것은 당신이 요청한 메모리의 양만 알고 있습니다.

malloc ()은 당신이 그 메모리에 무엇을 넣을지 모르기 때문에 (void *) 즉, 포인터라고도하는 임의의 메모리 주소입니다. 대부분의 최신 컴퓨터에서 주소는 64 비트 값으로 8 바이트 메모리로 표현할 수 있지만 컴퓨터는 다릅니다. r 및 다른 컴퓨터는 다른 크기를 반환 할 수 있습니다. 따라서 malloc ()은 (void *) 형식으로 8 바이트의 데이터를 반환 할 수 있습니다.

마지막으로 malloc ()이 제공 한 메모리 내부로 들어가야합니다. 정수. 어떻게하나요? malloc ()은 우리에게 어딘가의 공간에있는 메모리에 대한 포인터를주었습니다. 우리는 malloc ()에서 얻은 메모리 주소가 실제로 정수의 주소임을 컴파일러에 알려줍니다. 따라서 (int *).

이제 모든 과정을 거쳐 컴파일러가 원하는 것을 완전히 이해합니다. 모든 단계를 설명하는 데 어려움을 겪었 기 때문입니다. 8 바이트가 필요합니다. 정수를 포함하는 메모리의 4 바이트 위치를 가리키는 주소입니다.

이것이 전체 표현식이 의미하는 바입니다!

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다