[英]Incompatible pointer type pointer to array and double pointer to array
所以我是编程新手,我有这个我必须编写的程序,它有一个整数数组,我必须用一个指针将它传递给 function,然后用一个双指针。 在我编写代码后,我遇到了这个我找不到解决方案的错误。 错误是:
从不兼容的指针类型“int *”初始化“int **”[-Wincompatible-pointer-type]
我写的代码是这样的:
int main(){
int i;
int arr[]={3,-15,19,0,-984};
int *p=arr;
funzione(p,sizeof(arr)/sizeof(arr[0])); //The first function
for(i=0;i<(sizeof(arr)/sizeof(arr[0]));i++) //print of the single pointer (p)
printf("%d\n",p[i]);
int **g=p; //the error results to be coming from p in this row
for(i=0;i<(sizeof(arr)/sizeof(arr[0]));i++) //print of the double pointer (g)
printf("%d\n",g[i]);
funzione2(g,sizeof(arr)/sizeof(arr[0])); //The second function
return 0;
}
我的问题是如何消除此错误。
变量p
具有int *
类型,而初始化变量g
具有int **
类型。
int **g=p; //the error results to be
这些指针类型不兼容,并且没有从一种指针类型到另一种指针类型的隐式转换。
你需要写
int **g = &p;
for(i=0;i<(sizeof(arr)/sizeof(arr[0]));i++) //print of the double pointer (g)
printf("%d\n",( *g )[i]);
请注意,如果您还将按以下方式声明指针g
,则 for 循环可能看起来相同
int ( *g )[5] = &arr;
for(i=0;i<(sizeof(arr)/sizeof(arr[0]));i++) //print of the double pointer (g)
printf("%d\n",( *g )[i]);
此外,表达式sizeof(arr)/sizeof(arr[0])
具有无符号 integer 类型size_t
。 因此,最好将变量i
也声明为具有无符号类型size_t
而不是有符号类型int
。
size_t i;
尽管在最小的 scope 中声明变量i
会更好,例如
for( size_t i=0;i<(sizeof(arr)/sizeof(arr[0]));i++) //print of the double pointer (g)
printf("%d\n",( *g )[i]);
这称为 function
funzione2(g,sizeof(arr)/sizeof(arr[0])); //The first function
不是评论中写的第一个 function。:)
请看, p
的类型为int*
而g
的类型为int**
。 正如错误明确指出的那样,它们是不兼容的。 p
是指向 int 的指针,而g
是指向int
的指针。 如果你这样做int **g=&p;
编译器将停止抱怨,因为类型现在匹配。
&
运算符获取其参数的地址(将其想象为从变量中获取指针)。 如果将&
应用于指针,则将指针取出p
已经是指针,这就是您最终得到指向指针的指针的方式。
我建议你买一本好的 C 书,好好学习。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.