【发布时间】:2012-11-23 17:23:36
【问题描述】:
我想将 B int 数组指针传递给 func 函数,并能够从那里更改它,然后查看 main 函数中的更改
#include <stdio.h>
int func(int *B[10]){
}
int main(void){
int *B[10];
func(&B);
return 0;
}
上面的代码给了我一些错误:
In function 'main':|
warning: passing argument 1 of 'func' from incompatible pointer type [enabled by default]|
note: expected 'int **' but argument is of type 'int * (*)[10]'|
编辑: 新代码:
#include <stdio.h>
int func(int *B){
*B[0] = 5;
}
int main(void){
int B[10] = {NULL};
printf("b[0] = %d\n\n", B[0]);
func(B);
printf("b[0] = %d\n\n", B[0]);
return 0;
}
现在我收到这些错误:
||In function 'func':|
|4|error: invalid type argument of unary '*' (have 'int')|
||In function 'main':|
|9|warning: initialization makes integer from pointer without a cast [enabled by default]|
|9|warning: (near initialization for 'B[0]') [enabled by default]|
||=== Build finished: 1 errors, 2 warnings ===|
【问题讨论】:
-
好吧,错误信息解释了它。您传递一个指向 10 个数组的指针
int *,但func需要一个int**(它应该是一个指向(10,大概)int*s 数组的第一个元素的指针)。如何修复它取决于func的作用。 -
func 将简单地编辑 B 值,如 B[0]、B[1] 等。
-
那么您可能只想传递
B。由于B实际上是一个数组,因此传递&B通常没有用处,因为B无法更改(但它的内容可以更改,这就是您想要做的)。 -
当我尝试在 func 函数中编辑 B 的值时,使用新代码更新问题并出现错误
-
你原来的问题的答案是
func应该这样声明:int func(int (*B)[10])
标签: c arrays function pointers parameters