在下面的代码中,指针值和指针地址与预期的不同。
但是数组值和地址不需要!
这怎么可能呢?
输出
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;
}
发布于 2015-02-18 06:10:28
在查看数组的内存布局时,可以很容易地理解my_array
和&my_array
导致相同地址的原因。
假设您有一个包含10个字符的数组(而不是代码中的100个字符)。
char my_array[10];
my_array
的内存看起来像这样:
+---+---+---+---+---+---+---+---+---+---+
| | | | | | | | | | |
+---+---+---+---+---+---+---+---+---+---+
^
|
Address of my_array.
在C/C++中,数组会衰减到指向表达式中第一个元素的指针,例如
printf("my_array = %p\n", my_array);
如果您检查数组的第一个元素所在的位置,您将看到它的地址与数组的地址相同:
my_array[0]
|
v
+---+---+---+---+---+---+---+---+---+---+
| | | | | | | | | | |
+---+---+---+---+---+---+---+---+---+---+
^
|
Address of my_array[0].
发布于 2013-06-28 17:03:52
实际上,&myarray
和myarray
都是基址。
如果您希望看到区别,而不是使用
printf("my_array = %p\n", my_array);
printf("my_array = %p\n", &my_array);
使用
printf("my_array = %s\n", my_array);
printf("my_array = %p\n", my_array);
https://stackoverflow.com/questions/2528318
复制相似问题