我认为以下程序会清楚地说明我的疑问,所以我发布了该程序:
#include <stdio.h>
int main() {
int a[]={1,2,3,4,5};
if(&a[0] == a)
printf("Address of first element of an array is same as the value of array identifier\n");
if(&a == a)
printf("How can a value and address of an identifier be same?!");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这是输出链接:http : //ideone.com/KRiK0
当它不是sizeof或 一元运算&符的主题时,数组的计算结果为指向其第一个元素的(非左值)指针。
&a数组的地址也是如此a,a计算结果为数组中第一个元素的地址a[0]。
数组的地址和数组中第一个元素的地址相同并不奇怪(也就是说,尽管它们的类型不同,但它们指向相同的位置);structs也是如此。鉴于:
struct {
int x;
int y;
} s;
Run Code Online (Sandbox Code Playgroud)
然后&s和&s.x指向相同的位置(但有不同的类型)。如果转换为void *它们,它们将比较相等。这与&aand完全类似&a[0](因此只是a)。
| 归档时间: |
|
| 查看次数: |
2975 次 |
| 最近记录: |