数组右值总有一块内存区域暂存的吧

来源:6-2 左值与右值

三尺357159

2021-11-17

如果是“临时对象”的话,内存中应该有一块区域暂存的吧,编译器单独分配空间指的是在堆上分配空间,而像这些“临时变量”就存在栈上还是常量区?
我好像想明白

int arr[] = { 1,2,3,4,5 };  // 没有为arr分配内存,但是为1,2,3,4,5分配了内存 这就是为什么arr不能被赋值,但是arr[1]可以被赋值
int arr2[5] = { 1, 2, 3, 4, 5 };
cout << arr << endl;
cout << &arr << endl;
arr[1] = 3;

没有为arr分配内存,但是为1,2,3,4,5分配了内存,这就是为什么arr不能被赋值,但是arr[1]可以被赋值
内存结构的图就如下面:
图片描述
&arr获取的是一个指向整个数组的指针,所以&arr+1就等于首地址加上20这样。

写回答

1回答

quickzhao

2021-11-17

建议你不要在一个问题里问多个问题,多个概念。临时对象有存储空间,具体在哪里要看具体场景。你例子中的arr有存储空间,只是因为数组名其实是const修饰的指针,不能修改其值而已。arr[1]赋值改变的不是指针的值,而是指针指向位置的值。

0
0

重学C++ ,重构你的C++知识体系

一部大片,一段历史,构建C++知识框架的同时重塑你的编程思维

3884 学习 · 1103 问题

查看课程