这是我程序的示例代码。
我有一个名为function
的函数,用于返回整数值和整数数组。我必须将它们作为指针传递(function
的签名不能更改)。所以我写了下面的代码。在这里,我必须将值分配给传递给函数的双指针。
void function(unsigned int* count, unsigned int ** array)
{
for(unsigned int i = 0; i<4;i++)
{
//array[i] = (unsigned int*)i*10;
}
*count = 4;
}
int main()
{
unsigned int count;
unsigned int array2[4];
function(&count, (unsigned int**)&array2);
return 0;
}
但上面的代码无效。
答案 0 :(得分:2)
通过重用我认为你已经知道的概念,你可以使用指向数组第一个元素的指针,然后将指针的地址传递给函数。
这样你就会有一个指向unsigned int的双指针,这是数组的第一个元素:
void function(unsigned int* count, unsigned int ** array)
{
for(unsigned int i = 0; i<4;i++)
{
(*array)[i] = i*10; // WATCH OUT for the precedence! [] has higher precedence!
}
*count = 4;
}
int main(int argc, char* argv[])
{
unsigned int count;
unsigned int array2[4];
unsigned int *pointer_to_array = &array2[0];
function(&count, (unsigned int**)&pointer_to_array);
return 0;
}
作为旁注:
如果你可以改变签名,那就更有意义了:
void function(unsigned int* count, unsigned int * array)
{
for(unsigned int i = 0; i<4;i++)
{
array[i] = i*10;
}
*count = 4;
}
int main(int argc, char* argv[])
{
unsigned int count;
unsigned int array2[4];
function(&count, array2);
return 0;
}
上面工作的原因是因为当你将一个数组传递给一个函数(直接或使用一个指向该数组的显式指针)时,它实际上就变成了一个指针。这称为数组衰减。
答案 1 :(得分:1)
void function(unsigned int* count, unsigned int ** array){
for(unsigned int i = 0; i<4;i++){
(*array)[i] = i*10;
}
*count = 4;
}
int main(){
unsigned int count;
unsigned int array2[4];
unsigned int *p = &array2[0];
function(&count, &p);
return 0;
}
答案 2 :(得分:0)
要分配给由指针传递的数组,首先取消引用它,然后分配值。
void function(unsigned int* count, unsigned int ** array)
{
for(unsigned int i = 0; i<4;i++)
{
(*array)[i] = i*10;
}
*count = 4;
}