#include <stdio.h>
int main(void)
{
int i;
char a[][5] = {"LISP", "C", "Ada"};
char *p[] = {"PAUL", "X", "MAC"};
for (i = 0; i < 3; i++)
printf("a[%d] = \"%s\"\n", i, a[i]);
for (i = 0; i < 3; i++){
printf("p[%d] = \"%s\"\n", i, p[i]);
printf("p[%d]占用%d字节\n", i, sizeof(p[i]));
};
printf("p占用%d字节\n", sizeof(p));
return 0;
}
代码如上,我理解p[0]所占用的字节是4,p[1]所占用的字节是1,p[2]所占用的字节是3.
但是,实际情况是这样的,如下图所示
想请问高手,这是为什么?谢谢!
char *p[] = {"PAUL", "X", "MAC"};这句话是声明了一个指针变量的数组,p[0],p[1],p[2]在这里都是指针变量,而指针变量都是占4个字节的内存。你
说的p[0]所占用的字节是4,p[1]所占用的字节是1,这是指针变量指向的内存地址存储的数据的占用内存。不明白,先去百度下,指针和变量的区别吧。
p[0]、p[1]、p[2]都是指针,不管什么类型的指针都是占用4个字节。
那你肯定对指针不了解了,内存是一块块连成一片有序编好号的房子,当然他们的大小是一致的。指针就是获取这个房子的编号,获取指针的大小是没有意义的,因为全部都是一样的
你所理解的是指针里面数据占用的空间大小,而你打印的却是指针所占用的空间大小。指针不管什么类型都是4个字节,因为不管什么类型的指针,他存的都是他指向的内存数据的地址,这个地址你可以看成身份证编号,他是唯一的。如果你想打印这个指针指向的数据的大小,应该这样打印:
printf("p[%d]占用%d字节\n", i, sizeof(*p[i]));
指针变量规定占用四个字节,而且说这样子输出字节好像没啥用
指针变量规定占用四个字节,而且说这样子输出字节好像没啥用
指针的大小都是四个字节,获取指针的大小没有意义
char p[] ,先看变量p,先跟右边结合,说明这个变量是个数组形式的变量,再看左边,说明每个元素是指针,指针的类型为char型,
每个指针在32位机器上占4个字节