【发布时间】:2020-12-10 11:42:22
【问题描述】:
int func(int a[]);
int main()
{
int c = 21;
int *b;
b=&c;
printf("%d",b);
func(b);
return 0;
}
int func(int a[]){
printf("\n%d",(a));
printf("\n%d",*(a));
printf("\n%d",(a[0]));
printf("\n%d",(a[1]));
printf("\n%d",(a[2]));
}
这是我试图了解这些指针如何与数组一起工作的东西。 这是输出。
-680548828
-680548828
21
21
-680548828
32767
我理解的前两个 680548828 和两个 21。简单地打印 a 将是数组 a[] 的第一个元素。 a[0] 就像写 *a。我不明白为什么 a[1] 里面会有 680548828 。 a[1] 是数组中存储指向 21 的指针的元素之后的元素(a[0])?很抱歉造成混乱,请帮忙。谢谢。
【问题讨论】:
-
打印指针时没有使用兼容的格式。特别是,没有理由假设指针和
int具有相同的大小。使用%p安全地打印指针值(并将指针转换为void *)。 -
没有
a[1]或a[2]因为 a 指向单个 int - 这意味着您有未定义的行为。