【发布时间】:2013-07-29 12:36:21
【问题描述】:
如果i 是一个数组,我尝试了一个代码来查看&i 和i 之间的区别。我的假设是i 代表数组的起始地址,我不知道如果我也打印&i 会发生什么。
结果令人惊讶(对我来说),因为i 和&i 都是数组的起始地址。
#include<stdio.h>
int main()
{
char str[25] = "IndiaBIX";
int i[] = {1,2,3,4};
printf("%i\n", &i);
printf("%i\n", i);
return 0;
}
结果将是:
2686692
2686692
这是同一个地址。
但是如果我使用指向 int 的指针:
#include<stdio.h>
#include <stdlib.h>
int main()
{
int *j = (int *) malloc(sizeof(int));
*j = 12;
printf("%i %i %i\n", *j,j,&j);
return 0;
}
结果将是:
12
5582744
2686748
这里我假设第一个是j指向的内存区域的值,第二个是j指向的内存区域的地址,第三个是指针本身的内存地址。如果我打印i和&i,为什么&i不是指针i的内存地址?
【问题讨论】:
-
我解释说:What does sizeof(&arr) return?Check.
-
阅读comp.lang.c FAQ的第6节。
标签: c arrays pointers memory-address