나는 항상 생각이 &은 P = P = & *이 코드 시도 C.에서 P * :C 포인터와 주소
:#include <stdio.h>
#include <stdlib.h>
char a[] = "programming";
char *ap = &a[4];
int main(void)
{
printf("%x %x %x\n", ap, &*(ap), *&(ap)); /* line 13 */
printf("%x %x %x\n\n", ap+1, &*(ap+1), *&(ap+1)); /* line 14 */
}
첫 번째의 printf 라인 (라인 13) 나에게 주소를 제공합니다
40b0a8 40b0a8 40b0a8
예상과 동일합니다. 나는 두 번째의 printf 라인을 추가하지만, 볼랜드는 불평 :
"first.c"
: E2027 내가 얻을 기다리고 있었다 (14)
줄에서 main 함수에서 메모리 위치의 주소를 취해야합니다 40b0a9 40b0a9 40b0a9.
14 번째 줄의 * & (ap + 1) 표현이 여기에있는 것으로 보입니다. 줄 14에있는 세 포인터 표현식은 모두 같다고 생각했습니다. 내가 왜 잘못 생각하고 있니?
번째 관련된 질문 : 라인 어레이 (A)의 첫 번째 요소
char *ap = a;
포인트. 내가 사용
char *ap = &a[4];
배열 a의 다섯 번째 요소를 가리 키도록.
는 표현
char *ap = &a[0];
마지막 표현이 이전보다 단지 더 자세한인가와 같은 표현
char *ap = a;
인가? 당신은 단지 좌변의 주소, 객체를 참조 즉 식을 취할 수
두 번째 질문에 대답하려면 : 배열 이름의 값은 해당 배열의 0 번째 요소를 가리키는 포인터이므로 &a[0]; –
과 같습니다. 예, 우리는 항상 0 번째 요소를 가리 킵니다. 그러나 C에서 인덱스는 음수 일 수 있으며 C는 불평하지 않습니다. – yCalleecharan