首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么数组的地址等于它在C中的值?

为什么数组的地址等于它在C中的值?
EN

Stack Overflow用户
提问于 2010-03-27 13:59:56
回答 2查看 91.4K关注 0票数 216

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

但是数组值和地址不需要!

这怎么可能呢?

输出

代码语言:javascript
复制
my_array = 0022FF00
&my_array = 0022FF00
pointer_to_array = 0022FF00
&pointer_to_array = 0022FEFC
代码语言:javascript
复制
#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;
}
EN

回答 2

Stack Overflow用户

发布于 2015-02-18 06:10:28

在查看数组的内存布局时,可以很容易地理解my_array&my_array导致相同地址的原因。

假设您有一个包含10个字符的数组(而不是代码中的100个字符)。

代码语言:javascript
复制
char my_array[10];

my_array的内存看起来像这样:

代码语言:javascript
复制
+---+---+---+---+---+---+---+---+---+---+
|   |   |   |   |   |   |   |   |   |   |
+---+---+---+---+---+---+---+---+---+---+
^
|
Address of my_array.

在C/C++中,数组会衰减到指向表达式中第一个元素的指针,例如

代码语言:javascript
复制
printf("my_array = %p\n", my_array);

如果您检查数组的第一个元素所在的位置,您将看到它的地址与数组的地址相同:

代码语言:javascript
复制
my_array[0]
|
v
+---+---+---+---+---+---+---+---+---+---+
|   |   |   |   |   |   |   |   |   |   |
+---+---+---+---+---+---+---+---+---+---+
^
|
Address of my_array[0].
票数 4
EN

Stack Overflow用户

发布于 2013-06-28 17:03:52

实际上,&myarraymyarray都是基址。

如果您希望看到区别,而不是使用

代码语言:javascript
复制
printf("my_array = %p\n", my_array);
printf("my_array = %p\n", &my_array);

使用

代码语言:javascript
复制
printf("my_array = %s\n", my_array);
printf("my_array = %p\n", my_array);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2528318

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档