- 论坛徽章:
- 0
|
c语言的尴尬:取常量地址
[quote]原帖由 "flw"]语法规定了,对数组名称进行 & 运算是合法的,其结果就是数组的第一个元素的地址。 [/quote 发表:
你看看下面:
———————————————————————————————————
源程序:
#include <stdio.h>;
main()
{
int i,a[] = {0, 1, 2, 3};
for(i = 0; i < 4; i++)
fprintf(stderr, "%d\t", *(a + i));
//printf("%d\t", *(&a + i));
printf("\n" ;
printf("a = %d\ta + 1 = %d\t&a = %d\t&a + 1 = %d\n",\
a, a + 1, &a, &a + 1);
printf("a = %d\ta + 4 = %d\t&a = %d\t&a + 4 = %d\n",\
a, a + 4, &a, &a + 4);
}
-----------------------------------------------------------------------------
运行结果:
0 1 2 3
a = 2147483320 a + 1 = 2147483324 &a = 2147483320 &a + 1 = 2147483336
a = 2147483320 a + 4 = 2147483336 &a = 2147483320 &a + 4 = 2147483384
-----------------------------------------------------------------------------
我的结论:象flw所说的那样“a==&a”,没错!但是a和&a肯定是不同的,从上面的结果可以看出来。
[quote]原帖由 "yichun"]至于说 &sz 和 sz 仍是有差别的, 比较一下 sz + 1 和 &sz + 1 就可以知道. 将 sz 解释成数组首元素的地址可能是为了简洁的需要, 否则得用 &sz[0] 来表示. 而用 &sz 表示数组整体的首地址, 也是有必要的.[/quote 发表:
yichun老大说得好! |
|