int main() { int **p, a[3][2]; p = &a; return 0; }
时间: 2023-06-15 12:06:05 浏览: 57
这段代码存在问题,编译器会报错。
首先,`p`的类型是`int **`,而`&a`的类型是`int (*)[3][2]`,它们不一致。可以将`p`的类型改为`int (*p)[2]`来解决这个问题。
其次,数组`a`的类型是`int [3][2]`,它可以自动转换为指向第一行的指针,即`int (*)[2]`类型。因此,可以将`p`初始化为`a`的地址,即`p = a`,而不是`p = &a`。
修改后的代码如下:
```
int main() {
int (*p)[2], a[3][2];
p = a;
return 0;
}
```
相关问题
nt main() { int **p, a[3][2]; p = &a; return 0; }
这段代码存在类型不匹配的错误。
变量a是一个二维数组,其类型是int[3][2],因此&a的类型为int (*)[3][2],表示指向一个二维数组的指针。
而变量p的类型为int **,表示指向指针的指针,它可以指向一个int *类型的指针或者一个int类型的变量。
因此,将&a赋值给p是不合法的,因为它们的类型不匹配。如果想要让p指向a,可以将p的类型改为int (*)[2],表示指向一个一维数组的指针,然后将a的第一行地址赋值给p即可:
```
int (*p)[2]; // 指向一维数组的指针
int a[3][2];
p = a; // 指向a的第一行
```
int main() { int **p, a[3][2]; p = a; return 0; }
这段代码存在问题,因为p是一个二级指针,而a是一个二维数组,它们的数据类型不同。可以修改代码如下:
```
int main() {
int *p[3], a[3][2];
for (int i = 0; i < 3; ++i) {
p[i] = a[i];
}
return 0;
}
```
这样就可以将a的每一行地址赋值给p数组中的元素,使得p指向a的每一行。