gpt4 book ai didi

c - 请解释 C 中指针的歧义?

转载 作者:太空狗 更新时间:2023-10-29 16:26:51 27 4
gpt4 key购买 nike

#include<stdio.h>
main()
{ int x[3][5]={{1,2,10,4,5},{6,7,1,9,10},{11,12,13,14,15}};


printf("%d\n",x);
printf("%d\n",*x); }

这里首先 printf 将打印第一个元素的地址。那么为什么第二个 printf 不打印地址 x 处的值,即第一个值。要打印我需要写的值 **x。

最佳答案

对于指针,x[0] 等同于*x。由此可知,*x[0]**x 相同。

*x[0]中:

x 是一个 int[3][5],在表达式中使用时会转换为 int(*)[5] .所以 x[0] 是 int[5] 类型的左值(第一个 5 元素“行”),它再次转换为 int*,并取消引用到它的第一个元素。

*x 沿着相同的行进行评估,除了第一次取消引用是用星号完成的(与索引相反),并且没有第二次取消引用,所以我们最终得到类型的左值int[5],作为指向其第一个元素的指针传递给 printf

关于c - 请解释 C 中指针的歧义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7351331/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com