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

时间:2013-10-24 17:21:57

标签: 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;
}

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

int* array = NULL

还是有更好更清洁的方法来实现这个目标吗?

1 个答案:

答案 0 :(得分:5)

技术评论

首先,您遇到问题,因为readFile需要int *,而不是int **。如果你有

void readFile(int **array, int *size) {
  *array = malloc(X * sizeof(int));
  ...

你实际上可以像在

中一样调用它
int main() {
  int *array, size;
  readFile(& array, & size);
  ...

所以来电者的array会指向readFile分配的内容。

设计问题

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

  • main分配数组,readFile填充数据。
  • readFile使用您文件的内容分配和填充数组。

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