#include<stdio.h>
void change(int (*arr)[10]){
// manipulate
}
int main(){
int arrM[10]={1,2,3,4,5,6,7,8,9,0};
change(&arrM)
}
我知道arrM是一个常量指针,无法更改或分配,并且它不能作为指向** argv的指针传递,因为它降级为指向数组的指针,而不是指向指针的指针。但我的问题是“这是设计的方式,以保护阵列的初始内存不被覆盖(如果是的话如何?)或是否有一种机制可以进入可以改变常量的//操作区域指针arrM的值“
答案 0 :(得分:1)
我知道arrM是一个常量指针
不,数组不是常量指针。数组是不同的类型。存在数组衰减或隐式转换为指向其第一元素的指针的情况,例如,当一个数组传递给一个函数时,但这并不意味着一个数组是一个常量指针。
这是设计的方式,以保护阵列的初始 没有被覆盖的记忆(如果是的话怎么样?)或是否存在 可以进入可以改变的操纵区域的机制 常量指针arrM的值
变量是内存中的一个位置,它可以存储一个值,并由一个标识符引用,该标识符是变量的名称。当定义变量时,为其分配空间(当然,在运行时),并且使标识符引用该位置,即,标识符绑定到该位置。标识符将始终在该生命周期内引用该位置。您无法将标识符重新绑定到其他内存位置。您可以更改变量的值,即存储在变量名称引用的位置中的值,但这是另一回事。任何变量类型都是如此,而不仅仅是数组。
这意味着任何变量都在程序的内存空间的堆栈(自动存储分配)或文本或数据段(静态存储分配)中分配空间。您以后不能将变量绑定到其他地址。
答案 1 :(得分:1)
我知道arrM是一个常量指针,无法更改 或指定
数组名称(arrM)不应被视为指针,并将其视为const类型太过分了。
这post,几乎可以回答你的问题。
这是设计的方式,以保护阵列的初始 没有被覆盖的记忆(如果是的话怎么样?)或是否存在 可以进入可以改变的操纵区域的机制 常量指针arrM的值
数组的初始内存未被&#34;保护&#34;。你可以声明一个指针,指向数组的第一个元素,并使用指针算法来&#34;覆盖&#34;数组。
答案 2 :(得分:0)
不要将arrM视为指针。它有助于将其视为一个类似于常量的整数,其值是编译器分配的数组地址。获取arrM的地址比获取常量5的地址没有意义。同样,更改arrM的值比改变5的值没有意义。