3.以下两个小程序编译会报错,请解决掉错误,并说明原因。 (1)int main() { int **p, a[3][2]; p = &a; return 0; } 编译报错: cannot convert ‘int (*)[3][2]’ to ‘int **’ in assignment (2) int main() { int **p, a[3][2]; p = a; return 0; } 编译报错: cannot convert 'int [3][2]' to ‘int **’ in assignment
时间: 2023-06-13 21:08:43 浏览: 94
(1) int main() { int (*p)[3][2], a[3][2]; p = &a; return 0; }
原因:a是一个二维数组,&a是一个三维数组的指针。而p是一个二级指针,所以不能直接将&a赋值给p。将p改为一个指向二维数组的指针即可。
(2) int main() { int (*p)[2], a[3][2]; p = a; return 0; }
原因:a是一个二维数组,而p是一个指向指针的指针,所以不能直接将a赋值给p。将p改为一个指向一维数组的指针即可。
相关问题
以下两个小程序编译会报错,请解决掉错误,并说明原因。 (1)int main() { int **p, a[3][2]; p = &a; return 0; }
编译错误信息为:invalid conversion from 'int (*)[2]' to 'int**'。错误的原因是指针p的类型是int**,即指向指针的指针,而&a的类型是int(*)[2],即指向数组的指针,它们的类型不匹配。可以将指针p的类型改为int(*)[2],即指向数组的指针,代码如下:
```
int main() {
int (*p)[2], a[3][2];
p = a;
return 0;
}
```
注意,对于二维数组,指针p的类型应该是指向数组的指针,而不是指向指针的指针。
程序中只有double main 编译会报错吗
是的,如果程序中只有 double main() 而没有 int main(),编译器会报错,因为程序没有合法的入口点。具体的错误信息会因编译器和操作系统的不同而有所不同,但通常会提示找不到程序的入口点。
以下是一个示例程序,只包含 double main() 函数的定义。在编译这个程序时,编译器会报错:
```c++
#include <iostream>
double main()
{
std::cout << "Hello, world!" << std::endl;
return 0.0;
}
```
如果你尝试编译这个程序,你可能会得到一个类似于以下的错误信息:
```
error: 'main' must return 'int'
```
这是因为编译器期望程序的入口点是 int main(),而不是 double main()。
阅读全文