为什么 char 数组的两个元素的内存地址差异为 4?
Why is the difference in memory address' of two elements of a char array 4?
当找到两个彼此相邻的数组元素并找到差异时,我在 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 位系统上)。
如果有人知道为什么会这样并且可以提供解释,那将非常有帮助
char
的大小是1
,char *
的大小是实现相关的,在32
位系统中通常是4
。
如果声明一个 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 个指向字符的指针。
当找到两个彼此相邻的数组元素并找到差异时,我在 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 位系统上)。
如果有人知道为什么会这样并且可以提供解释,那将非常有帮助
char
的大小是1
,char *
的大小是实现相关的,在32
位系统中通常是4
。
如果声明一个 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 个指向字符的指针。