我想问一下如何摆脱从不兼容的指针类型分配的警告。 这是我使用的代码:
#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;
谢谢你的支持!
答案 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数组的地址传递给双指针...