为什么内存地址的差异是' char数组4的两个元素?

时间:2015-04-20 20:33:39

标签: c arrays memory

当我找到一种解释内存地址差异的方法时,我正在弄乱C,试图找到彼此相邻的两个数组元素并找到差异。这是我的代码:

#include <stdio.h>

int main(){
  char *a[5];
  printf("%p\n", (&a[0]));
  printf("%p\n", (&a[1]));
  return 0;
}

示例输出:

0xbf9343dc
0xbf9343e0

执行此操作时,输出不应该是表单中的内容:

0x0....0
0x0....1

因为char指针的大小应该是1(在我使用的32位系统上)。

如果有人知道为什么会这样,可以提供解释,那将非常有帮助

2 个答案:

答案 0 :(得分:7)

char的大小为1char *的大小取决于实现,通常4位系统中的32

答案 1 :(得分:3)

如果声明char数组而不是char *数组,那么您将获得预期的结果。请注意第char a[5]行。

$ cat foo.c
#include <stdio.h>

int main(){
  char a[5];
  printf("%p\n", (&a[0]));
  printf("%p\n", (&a[1]));
  return 0;
}

$ foo
0x7fff5e1119d7
0x7fff5e1119d8

char a[5]包含5个字符。 char *a[5]持有5个字符指针。