数组的地址如何等于C中的值?-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

数组的地址如何等于C中的值?

保持可爱mmm 2020-01-16 17:23:47 122

在下面的代码中,指针值和指针地址与预期的不同。

但是数组值和地址不行!

怎么会这样?

输出量

my_array = 0022FF00 &my_array = 0022FF00 pointer_to_array = 0022FF00 &pointer_to_array = 0022FEFC #include <stdio.h>

int main() { char my_array[100] = "some cool string"; printf("my_array = %p\n", my_array); printf("&my_array = %p\n", &my_array);

char *pointer_to_array = my_array; printf("pointer_to_array = %p\n", pointer_to_array); printf("&pointer_to_array = %p\n", &pointer_to_array);

printf("Press ENTER to continue...\n"); getchar(); return 0; }

C#
分享到
取消 提交回答
全部回答(1)
  • 保持可爱mmm
    2020-01-16 17:23:59

    数组的名称通常以数组的第一个元素的地址求值,因此,array且&array具有相同的值(但类型不同,因此array+1,如果数组长于1个元素,&array+1则将不相等)。

    对此有两个例外:当数组名称是sizeof或一元运算符&(地址)的操作数时,名称是指数组对象本身。因此sizeof array,您可以得到整个数组的大小(以字节为单位),而不是指针的大小。

    对于定义为的数组T array[size],它将具有type T *。当/如果增加它,您将到达数组中的下一个元素。

    &array计算结果到相同的地址,但是给定相同的定义,它将创建该类型的指针T(*)[size]-即,它是指向数组而不是单个元素的指针。如果增加此指针,它将增加整个数组的大小,而不是单个元素的大小。例如,使用如下代码:

    char array[16]; printf("%p\t%p", (void*)&array, (void*)(&array+1)); 我们可以预期第二个指针比第一个指针大16(因为它是16个char的数组)。由于%p通常将指针转换为十六进制,因此它可能类似于:

    0x12341000 0x12341010 问题来源于stack overflow

    0 0
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

推荐文章
相似问题