我想将malloc
创建的两个数组(*a
和*b
(的指针存储在一个函数中。
例如,如果是&a[0]=0x0061FEC8
和&b[0]=0x007700FE
,那么存储这两个指针的数组应该是c[0]=0x0061FEC8
和c[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
更改为其他类型,那么这应该会起作用。