C-作为无效ptr传递的ptr到int列表的地址-使用int或const int?

C-作为无效ptr传递的ptr到int列表的地址-使用int或const int?,c,pointers,constants,void-pointers,C,Pointers,Constants,Void Pointers,我有一个int*intList,我正在将&intList传递给一个函数,该函数接受一个void*。该函数的作用类似于: int** ptr = voidPtr; *ptr = malloc(...) for(...) { (*ptr)[i] = ... } 我的直觉告诉我,考虑到函数的功能,我应该将其保留为int*intList。但是我也知道int list的内容不应该在该函数之外进行修改,所以使用const int*int list是否正确?或者这是一个糟糕的设计?函数应该返回一个常量

我有一个
int*intList
,我正在将
&intList
传递给一个函数,该函数接受一个
void*
。该函数的作用类似于:

int** ptr = voidPtr;
*ptr = malloc(...)
for(...)
{
   (*ptr)[i] = ...
}

我的直觉告诉我,考虑到函数的功能,我应该将其保留为
int*intList
。但是我也知道int list的内容不应该在该函数之外进行修改,所以使用
const int*int list
是否正确?或者这是一个糟糕的设计?

函数应该返回一个
常量int*
,然后可以将它分配给同一类型的变量,而不是指针的地址

例如:

const int *getList()
{
    int *ptr = malloc(...)
    for(...)
    {
        ptr[i] = ...
    }
    return ptr;
}
那么就这样称呼它:

const int *intList = getList();

这可以防止像
intList[0]=4这样的更改。你需要做的唯一一件事是在将它传递到
free

时将指针指向
void*
不清楚如果以后它将被释放,它将如何不被修改?我认为这是一个糟糕的设计,因为
const
暗示列表的内容永远不会被更改,所以我不应该
free
它(这是错误的)。另一个与您的:
const char*foo(){return“foo”;}