数组与数组地址的地址[0] - C语言
-
01-10-2019 - |
题
我的问题是,为什么数组的地址与其第一个位置的地址不同?
我正在尝试写自己的杂物,但是首先,我只是在分配大量的记忆并播放地址。我的代码看起来大致是这样:
#define BUFF_SIZE 1024
static char *mallocbuff;
int main(){
mallocbuff = malloc(BUFF_SIZE);
printf("The address of mallocbuff is %d\n", &mallocbuff);
printf("The address of mallocbuff[0] is %d\n", &mallocbuff[0]);
}
&Mallocbuff每次运行时都是相同的地址。 &mallocbuff [0]每次都是随机地址。我期望这些地址相互匹配。谁能解释为什么不是这种情况?
解决方案
&mallocbuff
是指定变量的地址 mallocbuff
. &mallocbuff[0]
是缓冲区指向的第一个元素的地址 mallocbuff
, ,您分配了 malloc()
.
其他提示
mallocbuff 不是数组,而是指针。它与Malloc分配的位置完全分开。
这将为您期望(并根据需要)提供结果:
int main(){
char buf[1];
printf("&buf == %p\n", &buf);
printf(" buf == %p\n", buf); // 'buf' implicitly converted to pointer
printf("&buf[0] == %p\n", &buf[0]);
char* mbuf = buf;
printf(" mbuf == %p\n", mbuf);
printf("&mbuf[0] == %p\n", &mbuf[0]);
printf("\n&mbuf(%p) != &buf(%p)\n", &mbuf, &buf);
return 0;
}
输出:
&buf == 0x7fff5b200947
buf == 0x7fff5b200947
&buf[0] == 0x7fff5b200947
mbuf == 0x7fff5b200947
&mbuf[0] == 0x7fff5b200947
&mbuf(0x7fff5b200948) != &buf(0x7fff5b200947)
当您接受地址 mallocbuf
(通过 &mallocbuf
)您没有获得数组的地址 - 您正在获得指向数组的变量的地址。
如果您想要数组的地址,只需使用 mallocbuf
本身(在第一个 printf()
)。这将返回与 &mallocbuf[0]
不隶属于 StackOverflow