在学习C语言中的数组和指针时,我感到困惑,为什么ch、&ch、&ch[0]相等,而sptr、&sptr、&sptr[0]不相等呢?以下是我的源代码:
int main(void)
{
char ch[7] = { '1','2','3','4','5','6','0' };
char *sptr = "132456";
double db[4] = { 1.0,2.0,3.0,4.0 };
printf("\n%p %p %p\n", ch, &ch,&ch[0]);
printf("\n%p %p %p\n", sptr, &sptr,&sptr[0]);
printf("\n%p %p %p\n", db, &db,&db[0]);
return 0;
}
我的机器上的输入为:
00FDFD68 00FDFD68 00FDFD68
00037CD0 00FDFD5C 00037CD0
00FDFD34 00FDFD34 00FDFD34
printf
调用都会因为传递错误类型给%p
转换类型说明符而引发未定义行为。 - too honest for this site(void *)
。在大多数真实系统上,这不会有任何区别,但是最好在可能的情况下保持正确,因为已知某些类似的“无害”错误会导致问题。 - davmac