Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 保护动态分配的阵列_C_Constants - Fatal编程技术网

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)文件中,但在头文件(其他人包括的)中,仅声明希望其他人能够访问的函数。