我有点困惑。这是代码
main(){
int i=3;
char p[10]="abcdefdeg";
char *ptr;
ptr=p;
printf("%p\n",&p[i]); // Gets a normal address
printf("%p\n",ptr[i]); // Gets 0x64
printf("%p\n",(ptr+i)); // Gets a normal address
}
为什么ptr [i]和(ptr + i)会得到不同的结果? Aren的这两个符号是否具有相同的含义?似乎当我使用带指针的数组表示法时,它将地址的内容解释为地址......但我不知道为什么
答案 0 :(得分:1)
在这种情况下,ptr[i]
和(ptr+i)
应该打印不同的值,他们会这样做。它们不一样。
实际上,ptr[i]
相当于撰写*(ptr+i)
。
为了澄清,ptr
包含一个地址,而(ptr+i)
只是为您提供了另一个地址,增加了i
。要在地址处获取值(由ptr[i]
完成),您需要使用取消引用运算符*
。
此外,正如评论中所述,第二个printf()
应为printf("%c\n",ptr[i]);
,因为它指向char
类型。
答案 1 :(得分:0)
&p[i] // address of i-th element of array p
p[i] // i-th element of array p
(p+i) // p + i, -> address of i-th element of array p
*(p+i) // i-th element of array p
[]
符号实际上只是一种语法糖。