有人可以告诉我c中的内存分配吗? char变量的大小是多少? 2还是4? 为什么数组中2个相邻char元素之间的地址值差异仅为1?
char foo [] = {'a', 'b'};
printf ("This is the Address of val1 %d \n", &foo[1]); // -1079295441
printf ("This is the Address of val2 %d \n", &foo[2]); // -1079295440
printf ("The size of each array member is %d \n", sizeof(foo)); // 2
答案 0 :(得分:3)
您无法正确打印地址:地址不是int
,因此您无法使用%d
进行打印。改为使用%p
(代表“指针”),并将地址转换为void*
进行打印:
printf ("This is the Address of val1 %p\n", (void*)&foo[1]);
现在你的程序产生了这个或类似的输出:
This is the Address of val1 0xffbd2fcf
This is the Address of val2 0xffbd2fd0
The size of each array member is 2
两个指针由1
关闭,这是一个char
的大小。整个数组的大小为2
。如果要打印单个元素的大小,请使用foo[0]
。
答案 1 :(得分:0)
内存分配有些棘手,但是比您想象的要容易。顾名思义,它是用来优化程序功能和速度的数据使用和选择。基本上,内存分配是C / C ++等语言的“特权”,它允许程序员仅使用所需数量的数据,从而为其他计算机功能释放了内存。
一些关于内存的好信息...
可变尺寸:
当相邻元素具有相同类型(例如,一个字符数组)时,它们的地址差将以内存大小的值递增/递减。 由于char变量的大小为1个字节,因此相邻元素的地址将相差1。
例如:字符地址:1204、1205、1206、1207 ...(1个字节)
int地址:1204、1208、1212、1216 ...(4个字节)