我的问题是,为什么数组的地址与其第一个位置的地址不同?

我正在尝试写自己的杂物,但是首先,我只是在分配大量的记忆并播放地址。我的代码看起来大致是这样:

#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]

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top