从不兼容的指针类型(C)分配警告

时间:2017-11-11 21:54:08

标签: c++ c arrays pointers

我想问一下如何摆脱从不兼容的指针类型分配的警告。 这是我使用的代码:

#include<stdio.h>

int main()
{
    int a2d[2][2]={{1,2},{3,4}};
    int **pa;
    pa=a2d;
}

得到这个:

7:5: warning: assignment from incompatible pointer type pa=a2d;

谢谢你的支持!

3 个答案:

答案 0 :(得分:0)

assignment from incompatible pointer type pa=a2d;


   pa    =   a2d;
    |         |
  operand1  operand2
    |          |   
  double      2D
  pointer    array

这里是operand2,我们分配给operand1。赋值运算符的属性是两个操作数的类型应该相同,如果不相同,则会发生隐式类型转换(由编译器完成)或显式类型转换(由用户完成)。

在你的情况下,两个操作数的类型不同,一个是双指针,另一个是2D数组,这就是为什么&#34;从不兼容的指针类型中分配&#34;

答案 1 :(得分:0)

您可能希望将2d数组衰减为指向数组元素的指针数组。在这种情况下:

int a2d[2][2] = { { 1,2 },{ 3,4 } };
int (*pa)[2] = a2d;

要访问4:

std::cout << *(*(pa + 1) + 1);

(pa + 1)指向{3,4}的指针,*(pa + 1)是指向3的指针,(*(pa + 1) + 1)是指向4的指针,{{1} }是*(*(pa + 1) + 1)

的值

答案 2 :(得分:0)

你的作业是错误的,你不能解析2d数组指向指针。 你的代码应该是这样的:

EntityList

Becasue 2d数组不是双指针。但这有效:

#include<stdio.h>

int main()
{
    int a2d[2][2]={{1,2},{3,4}};
    int * pa;
    pa=&a2d[0][0];
}

但它传递了它的地址。但如果你写:

#include<stdio.h>

int main()
{
    int ad[2]={4,5};
    int * pa;
    pa=ad;
}

它将a2d数组的地址传递给双指针...