포인터에 대한 질문이 있습니다. 나는이 개념을 이해하기 시작했지만,이 특정 코드는 이해를 위협하고 있으며, 나는 그것을 정리하고 싶다.포인터 C - 추가 1
내가 *ptr
이후 &my_array[0]
에 초기화 된, 인상 printf("ptr + %d = %d\n",i, *ptr++); /*<--- B*/
했다입니다 라인 "B"를,주의, 다음 *ptr++
(번역 것이다 "ptr
에 저장되어있는 주소로 무엇이든, 추가 one to it ")은 23을 출력하며, 이는 my_array[1]
에있는 값입니다.
그러나 my_array[0]
의 값인 1
을 출력합니다.
++
이 주소 자체에 추가되는지 (1004는 1005가 되는가)에 혼란 스럽습니다. 정수는 약 4 바이트의 공간을 차지하므로 혼란 스럽습니다. 이는이 값이 my_array[0]
1, 주소 1001, 1002, 1003, 1004을 차지할 것이며, my_array[0]
1001에서 밖으로 시작 이후에만 1002까지 간다, 다음 *ptr++
여전히) 1
입니다 my_array[0]
, ...
또는 인쇄 할 것이다. ..
*ptr++
이 my_array[0]
(어느 쪽이 단지 *ptr
)에서 my_array[1]
*ptr++
으로 변경되었습니다.
기본적으로이 프로그램에 대해 *ptr++
이 무엇을하는지 설명하십시오. 제가 5 살 때처럼 저에게 설명해주십시오.
는 정말 감사하고, 여기에 코드는 다음과 같습니다
이#include <stdio.h>
int my_array[] = { 1, 23, 17, 4, -5, 100 };
int *ptr;
int main(void)
{
int i;
ptr = &my_array[0]; /* point our pointer to the first
element of the array */
printf("\n\n");
for (i = 0; i < 6; i++)
{
printf("my_array[%d] = %d ", i, my_array[i]); /*<-- A */
printf("ptr + %d = %d\n", i, *ptr++); /*<--- B*/
}
return 0;
}
정확히 어떻게 postfix가 실제로 작동하는지 설명합니다. 얼마나 많은 사람들이 증분이 당신이 묘사 한 방식이 아닌 이전의 가치를 반환하는 * 문장 * 다음에 일어날 것이라고 생각하는 것은 놀랍습니다. C++과 같은 언어로 구현하는 것이 가장 비용이 많이 드는 이유 중 하나입니다. 왜냐하면 임시 복사본이 만들어 져야하기 때문입니다. – WhozCraig
so * ptr ++는 printf 다음에 증가하고 * (++ ptr)는 수정 된 값을 인쇄하는 printf 전에 증가합니다. – user2044189
그리고 * ++ ptr은 * (++ ptr)와 같습니다. 감사! – user2044189