C 数组,用于存储 malloc'd 数组的指针



我想将malloc创建的两个数组(*a*b(的指针存储在一个函数中。

例如,如果是&a[0]=0x0061FEC8&b[0]=0x007700FE,那么存储这两个指针的数组应该是c[0]=0x0061FEC8c[1]=0x007700FE

void storePointers(int **ptrArray){
// create two arrays a and b by malloc
int *a = (int *)malloc(5*sizeof(int));  // a stores 5 integers
int *b = (int *)malloc(10*sizeof(int)); // b stores 10 integers
// create an array to store the pointers of a and b
*ptrArray = (int **)malloc(2*sizeof(int*));
(*ptrArray)[0] = a;
(*ptrArray)[1] = b;
}
int main(){
int *mArray = NULL;

storePointers(&mArray);
// these two lines should print 0x0061FEC8 and 0x007700FE
printf("mArray[0]: %pn", mArray[0]);
printf("mArray[1]: %pn", mArray[1]);

return 0;
}

这个程序确实有效。但编译器显示了一条警告信息:

warning: assignment to 'int' from 'int *' makes integer from pointer without a cast [-Wint-conversion]
(*ptrArray)[0] = a;
warning: assignment to 'int' from 'int *' makes integer from pointer without a cast [-Wint-conversion]
(*ptrArray)[1] = b;

我认为int是常见的,所以编译器自己解决了问题,这样我的程序才能正常运行?我有另一个类似的程序,但它使用struct。因此,我得到的不是警告,而是的错误

Error: incompatible types when assigning to type 'myStruct' from type 'myStruct *'

我想知道根本原因和解决方案,以消除警告,并最终消除结构程序中的错误。

如果一个数组是int *,那么一个数组就是int **,如果您想返回一个数组作为out参数,那么您需要一个指向它的指针——int ***。因此,您需要更改mArray的类型以及ptrArray参数:

void storePointers(int ***ptrArray){
// create two arrays a and b by malloc
int *a = (int *)malloc(5*sizeof(int));  // a stores 5 integers
int *b = (int *)malloc(10*sizeof(int)); // b stores 10 integers
// create an array to store the pointers of a and b
*ptrArray = (int **)malloc(2*sizeof(int*));
(*ptrArray)[0] = a;
(*ptrArray)[1] = b;
}
int main(){
int **mArray = NULL;

storePointers(&mArray);
// these two lines should print 0x0061FEC8 and 0x007700FE
printf("mArray[0]: %pn", mArray[0]);
printf("mArray[1]: %pn", mArray[1]);

return 0;
}

如果您将类型从int更改为其他类型,那么这应该会起作用。

相关内容

  • 没有找到相关文章

最新更新