다음 코드가 주어 졌을 때이를 해결하기위한 트릭 (그래프, 다이어그램 또는 단계별 지침)이나 유사한 포인터 질문이 있습니까?
나는 이미 답을 알고 있다는 것을 의미합니다. 계산하는 데 너무 오래 걸렸습니다.
static int data[] = {0,1,2,3,4}
int*p[] = {data,data+1,data+2,data+3,data+4};
int**ptr=p;
ptr++;
printf("\n %d %d %d",ptr-p, *ptr-data, **ptr);
*ptr++;
printf("\n %d %d %d",ptr-p, *ptr-data, **ptr);
*++ptr;
printf("\n %d %d %d",ptr-p, *ptr-data, **ptr);
++*ptr;
printf("\n %d %d %d",ptr-p, *ptr-data, **ptr);
포인터를 놓치는 상황에서 제가 가장 좋아하는 트릭은 펜과 종이를 사용하는 것입니다.
변수에는 사각형을, 포인터에는 화살표를 그립니다.
포인터 변수 인 가변 사각형에서 가리키는 사각형으로 화살표를 그립니다.
ASCII 아트에서는 종이처럼 직관적으로 작동하지 않지만 다소 비슷해 보입니다.
data [ 0 ][ 1 ][ 2 ][ 3 ][ 4 ]
^ ^ ^ ^ ^^
| | | |.../| ("..." meaning chronologically progressing,
| | | | / | though this one is the fourth step)
| | | | / |
p [ | ][ | ][ | ][ |/][ | ]
^ ^ ^ ^
|... |... |... | (here are the first three steps)
ptr
ptr은 p의 인덱스 4를 가리 키지 않고 대신 인덱스 3의 포인터가 증가하여 데이터의 인덱스 4를 가리 킵니다. (확실히 나는 그 세부 사항에 대해 실제로 다루지 않았고, 나는 당신의 코드에서 그것을 한 결과가 아니라 트릭에 내 질문을 집중합니다. 의도적으로 읽기 어려운 연산자 사용을 잘못 읽었을 수 있습니다 ...)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다