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



我有一个int* intList,我正在&intList传递给一个接受void*的函数。该函数执行以下操作:

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

我的直觉告诉我,考虑到函数的作用,我应该把它留作int* intList。但我也知道 int 列表的内容永远不应该在该函数之外修改,所以拥有 const int* intList 是正确的吗?还是设计不好?

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

例如:

const int *getList()
{
    int *ptr = malloc(...)
    for(...)
    {
        ptr[i] = ...
    }
    return ptr;
}

然后这样称呼它:

const int *intList = getList();

这可以防止像 intList[0] = 4 . 您唯一需要做的就是在将指针传递给free时将指针投射到 void *

最新更新