在C中初始化指针的最简洁方法是什么?

JHn*_*net 4 c pointers initialization

我想要一个C函数来读取文件并返回一个动态的int数组.初始化此数组指针的最佳方法是什么?

我目前的版本:

void readFile(int* array,int* size){
   // ...read the file and see there are X integers...
   array = malloc(X * sizeof(int));
   *size = X;
   // ... fill the array ...
   }
int main() {
   int* array;
   int size;
   readFile(array,&size);
   //Work with array
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

这给了我单一化的警告,只是这样做

int* array = NULL
Run Code Online (Sandbox Code Playgroud)

或者有更好,更清洁的方法来实现这一目标吗?

s.b*_*ara 5

技术评论

首先,你有问题,因为readFile需要int *,而不是int **.如果你有

void readFile(int **array, int *size) {
  *array = malloc(X * sizeof(int));
  ...
Run Code Online (Sandbox Code Playgroud)

你实际上可以像在里面那样称呼它

int main() {
  int *array, size;
  readFile(& array, & size);
  ...
Run Code Online (Sandbox Code Playgroud)

所以来电者array会指出readFile分配的内容.

设计问题

对于您的具体问题,只要清楚地理解初始化/分配和清理的责任,技术上两者都是可能的:

  • main分配数组,并readFile填充它.
  • readFile 使用文件内容分配和填充数组.

main可以分配内存,因为它是知道何时清理(释放内存)的功能.否则,实现的单元readFile也可以实现freeFile其他人使用的功能.