【发布时间】:2014-10-27 13:41:46
【问题描述】:
在这段代码中:
#include<stdio.h>
int main()
{
int num[2] = {20, 30};
printf("%d", num);
printf("%d", &num[0]);
return 0;
}
据我所知,printf 语句都会打印num 中第一个元素的地址,因为在第一条语句中,num 是一个指向 int 的指针。
但如果num 是一个指针,那么它也应该有任何地址,但在打印它的地址(使用printf("%d", &num))时,它会显示第一个元素的地址。
在二维数组中,整个事情也变得令人困惑:
#include<stdio.h>
int main(void)
{
int num[ ] [2]={20,30,40,50};
printf("%d",*num);
return 0;
}
此程序正在打印第零个元素的地址,即num[0][0] 的地址。但它为什么这样做呢?为什么不打印存储在其中的值,因为它们都有相同的地址(num,num[0] 和 num[0][0])?
【问题讨论】:
-
你能用编辑器编辑你的消息来区分你的代码吗?
-
首先,您的程序展示了未定义行为 (UB)。每当您想打印变量的地址时,您必须使用 %p,而不是 %d(整数)。
-
在C构造中
*num表示从地址num取值,类似于num[0] -
@MikeMinaev 我的问题是,如果 num 是第一个示例中的指针,那么它应该有自己的地址但与 num[0] 具有相同的地址,为什么?第二个问题是,在第二个示例中,*num 显示的是地址而不是第零个元素的值,为什么?它们都有相同的地址(num,num[0],num[0][0])
标签: c arrays pointers address-operator