数组右值总有一块内存区域暂存的吧
来源: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]赋值改变的不是指针的值,而是指针指向位置的值。
00
相似问题