在堆中, 当一个变量占多个字节的内存时,变量的指针指向的是高地址还是低地址?
已知
当一个变量占多个字节的内存时,变量的指针指向的是高地址还是低地址?在栈中指针指向的是最低地址的那个字节(大概知道是因为push的原因)
void main()
{
int a=0x01020304;
unsigned char* a1=(unsigned char*)(&a);
unsigned char* a2=(a1+1);
unsigned char* a3=(a1+2);
unsigned char* a4=(a1+3);
printf("a:%x\n", a);
printf("a1:%d\n", *a1);
printf("a2:%d\n", *a2);
printf("a3:%d\n", *a3);
printf("a4:%d\n", *a4);
return ;
}
输出结果:
提问
在堆中的实现不知道怎么写。
请教下:
- 当一个变量占多个字节的内存时,变量的指针指向的是高地址还是低地址?在堆中指针指向的是否也是最低地址的那个字节?
- 是否一个变量占多个字节都是从低到高?另外大小端有区别吗?
- 编译器一般对堆内存会怎么处理?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我想你把内存的生长方向与操作逻辑搞混了,这是两件事,堆跟栈的生长方向不同,是指分配的方向不同。但是对于一个变量或者一段内存块来说,不管在哪里,操作逻辑是相同的,操作逻辑,不会因为栈区或堆区而搞差异化操作,没必要并且也不应该有差异。
大小端是关系到数据的存放顺序,a1~4的输出,小端是4321,大端是1234,跟你的问题没关系
申请堆内存可以用malloc或者new
输出: