gpt4 book ai didi

c - 指针数组

转载 作者:太空宇宙 更新时间:2023-11-04 07:39:26 25 4
gpt4 key购买 nike

考虑以下代码:

#include <stdio.h>

int main()
{
static int a[]={0,1,2,3,4};
int *p[]={a,a+1,a+2,a+3}; /* clear up to this extent */
printf(("%u\n%u\n%u",p,*p,*(*p))); /* how does this statement work? */
return 0;
}

还有,是否需要通过%u获取地址的值,或者我们也可以使用%d

最佳答案

好的,您已经创建了一个整数数组并用从 0 到 4 的整数填充它。然后您创建了一个包含 4 个元素的整数指针数组,并对其进行了初始化,使其四个元素指向 的前四个元素A。到目前为止,还不错。

那么printf就很奇怪了。 printf 被传递了一个参数,即 ("%u\n%u\n%u",p,p,(*p))。这是一个逗号表达式,这意味着逗号分隔的表达式将依次计算,只返回最后一个。因为第一件事是文字,而不是表达式,所以我希望它会产生错误。但是,如果没有多余的括号,您将:

printf("%u\n%u\n%u\n",p, *p, *(*p));

这是合法的。三个值被传递给 printf,被解释为无符号整数(这实际上只适用于某些系统,因为在前两种情况下您实际传递的是指针,并且它们不能保证与无符号整数的大小相同)并打印出来。

这些值是 p、*p 和 **p。 p是一个数组,p的值就是数组的地址。 *p是p指向的,也就是数组的值。 *p 是第一个值,*(p+1) 是第二个值,等等。现在 *p 是存储在 p[0] 中的值,它是 a[0] 的地址,所以打印另一个地址。第三个参数是 **p 是存储在 (*p) 的值,或者 a[0],即 0

关于c - 指针数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5639166/

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