gpt4 book ai didi

C: 数组指针指向自己的地址同时携带一个值?

转载 作者:太空狗 更新时间:2023-10-29 15:32:29 25 4
gpt4 key购买 nike

我是c语言的新手

所以在c中,如果我在 main 方法中执行以下操作,

int* a = malloc( sizeof( int ) );
a[0] = 1;
printf( "%x\n", a ); // 1d02230
printf( "%x\n", &a ); // 4bed1c00
printf( "%x\n", a[0] ); // 1
printf( "%x\n", &a[0] ); // 1d02230

这对我来说很有意义。但是当我执行以下操作时,

int b[] = {1};
printf( "%x\n", b ); // 4bed1bf0
printf( "%x\n", &b ); // 4bed1bf0
printf( "%x\n", b[0] ); // 1
printf( "%x\n", &b[0] ); // 4bed1bf0

这对我来说没有意义......看起来 b 是一个指向它自己地址的指针,它也带有值 1。我怀疑它与 b 是一个静态数组有关,但是如何我明白这个????

最佳答案

指针和数组不是一回事。在大多数情况下,数组衰减 为指向其第一个元素的指针,但当它们是一元& 运算符的参数时则不然。这意味着你的第二个例子意味着:

printf( "%x\n", b );     // array name decays, 100% equivalent to &b[0]
// type: int *
printf( "%x\n", &b ); // name does *not* decay, gives address of array
// type: int (*)[1]
printf( "%x\n", b[0] ); // value of array element 0
// type: int
printf( "%x\n", &b[0] ); // address of array element 0, same as line 1
// type: int *

相比之下,你的第一个例子:

printf( "%x\n", a );     // value of pointer a
// type: int *
printf( "%x\n", &a ); // address of pointer a
// type: int **
printf( "%x\n", a[0] ); // value of element pointed to by a
// type: int
printf( "%x\n", &a[0] ); // address of element pointed to by a (equivalent to a)
// type: int *

请注意,%x 不是用于大多数这些打印语句的正确格式;你很幸运能够逃脱惩罚,但严格来说这是未定义的行为。

关于C: 数组指针指向自己的地址同时携带一个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29052614/

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