我有一个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 *
。