C中字符/数组长度内存分配的大小,
有人能告诉我c语言中的内存分配吗?C中字符/数组长度内存分配的大小,,c,C,有人能告诉我c语言中的内存分配吗? char变量的大小是多少?2还是4? 为什么数组中两个相邻字符元素之间的地址值差只有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]); // -10792
char变量的大小是多少?2还是4? 为什么数组中两个相邻字符元素之间的地址值差只有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
您没有正确打印地址:地址不是
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
关闭,这是单个字符的大小。整个阵列的大小为2
。如果要打印单个元素的大小,请使用foo[0]
内存分配有点棘手,但比您想象的要简单。顾名思义,它是对数据的使用和选择,以优化程序功能和速度。基本上,内存分配是C/C++等语言的一种“特权”,它允许程序员只使用所需的数据,为其他计算机功能释放内存
一些关于记忆的好信息
- 内存以“字节”表示,这些字节是8位的数据“组”
- “位”是0或1的值
可变尺寸:
- 字符:1字节
- 整数:4字节
- 双精度:8字节
当相邻元素的类型相同(例如,一个字符数组)时,它们的地址会有一个差,按内存大小的值递增/递减。
由于char变量的大小为1字节,相邻元素的地址相差1
字符地址:1204120512061207。。。(1字节)
内部地址:12041208121216126。。。(4字节)foo
是一个字符数组,因此与任何其他数组大小相同,因为它本质上只是一个指针。“字符变量的大小是多少?2或4?”它是1@apokryfos,数组不是指针。根据元素类型和容量的不同,它们有不同的大小。@好吧,这里面没有过多的类型转换answer@Oka这是必需的<代码>%p
需要void*
,因此传递int*
被认为是UB。啊,这是安全提升指向void*
的任何指针的例外。猜这和瓦拉格有关?有趣。@Oka尽管任何指针都可以在需要void*
的上下文中使用(调用带有void*
参数的函数,对void*
变量的赋值)printf
有一个可变长度的参数列表。因此,默认情况下,指针不会被转换。