繁体   English   中英

指向数组的指针和指向数组的双指针不兼容

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM