C 保护动态分配的阵列
我只想在函数顶部填充一次动态创建的数组。之后的每个函数只能访问内容,不能修改。正确的方法是什么:C 保护动态分配的阵列,c,constants,C,Constants,我只想在函数顶部填充一次动态创建的数组。之后的每个函数只能访问内容,不能修改。正确的方法是什么: const double *pt = malloc(sizeof(double)*num); 或 当我使用第二种方法时,是否必须将pt强制转换为const?第一种方法将不起作用,因为您无法在第一个位置填充数组(因为您已经声明了它const) 如果在调用f()之前已经填充了数组,则第二个方法将起作用。第一个方法将不起作用,因为您将无法在第一个位置填充数组(因为您已声明它常量) 如果在调用f()可能的
const double *pt = malloc(sizeof(double)*num);
或
当我使用第二种方法时,是否必须将pt强制转换为const?第一种方法将不起作用,因为您无法在第一个位置填充数组(因为您已经声明了它
const
)
如果在调用
f()
之前已经填充了数组,则第二个方法将起作用。第一个方法将不起作用,因为您将无法在第一个位置填充数组(因为您已声明它常量)
如果在调用f()
可能的解决方案之前已经填充了数组,则第二种方法将起作用:
创建一个“get”函数,该函数接收索引并返回数组中的值,如下所示:
double get(int index){
return pt[index];
}
//kept private:
double * pt = malloc(...);
pt[0] = 1;
pt[1] = 2;
....
//make public
double const * public_pt = (double const *)pt;
使get
公开,但不公开pt
填充pt
,但将其保持为私有,并提供如下“const”指针:
double get(int index){
return pt[index];
}
//kept private:
double * pt = malloc(...);
pt[0] = 1;
pt[1] = 2;
....
//make public
double const * public_pt = (double const *)pt;
可能的解决办法:
创建一个“get”函数,该函数接收索引并返回数组中的值,如下所示:
double get(int index){
return pt[index];
}
//kept private:
double * pt = malloc(...);
pt[0] = 1;
pt[1] = 2;
....
//make public
double const * public_pt = (double const *)pt;
使get
公开,但不公开pt
填充pt
,但将其保持为私有,并提供如下“const”指针:
double get(int index){
return pt[index];
}
//kept private:
double * pt = malloc(...);
pt[0] = 1;
pt[1] = 2;
....
//make public
double const * public_pt = (double const *)pt;
你不需要强制转换来添加“const”。@DavidSchwartz:你的意思是当我调用函数f时,我可以简单地将pt传递给它,而不需要先将它强制转换为(constdouble*)?正确。添加“const”是一个简单的转换。(当然,移除它不是!)而且你不需要强制转换来添加“const”。@DavidSchwartz:你的意思是当我调用函数f时,我可以简单地将pt传递给它,而不需要先将它强制转换为(const double*)?对。添加“const”是一个简单的转换。(当然,删除它不是!)在C中有没有一种方法可以使事物私有化或公有化?不是C++ + @富:是的-你可以使用头文件/源文件来完成这个操作。将所有函数/变量的定义放在源(.c)文件中,但在头文件(其他人包括的)中只声明您希望其他人能够访问的函数。有没有办法在c中将内容设置为私有或公共?不是C++ + @富:是的-你可以使用头文件/源文件来完成这个操作。将所有函数/变量的定义放在源(.c)文件中,但在头文件(其他人包括的)中,仅声明希望其他人能够访问的函数。