C++ c++;“错误”;int*”类型的标量初始值设定项周围的大括号;

C++ c++;“错误”;int*”类型的标量初始值设定项周围的大括号;,c++,C++,错误:int*类型的标量初始值设定项周围用大括号括起来 我试图将数组传递给函数,但在初始化步骤中不断出现此错误 我怎样才能解决这个问题 #include <iostream> using namespace std; void func (int *p[4]); int main() { int *p[4]={ {1,4,5},{3,5,6},{6,6,2},{6,5,3}}; //The error appears here

错误:int*类型的标量初始值设定项周围用大括号括起来

我试图将数组传递给函数,但在初始化步骤中不断出现此错误

我怎样才能解决这个问题

#include <iostream>
using namespace std;
void func (int *p[4]);
int main()
{
int *p[4]={ {1,4,5},{3,5,6},{6,6,2},{6,5,3}};   //The error appears here                                                                   
func(p);
return 0;
}
void func (int *p[4])
{
for(int i=0;i<4;i++)
{
for(int j=0;j<1;j++)
{  cout<<p[i][j]; }
}
cout<<" \t";
}
#包括
使用名称空间std;
void func(int*p[4]);
int main()
{
int*p[4]={{1,4,5},{3,5,6},{6,6,2},{6,5,3};//错误出现在这里
func(p);
返回0;
}
void func(int*p[4])
{

对于(int i=0;i变量
p
是指针数组。
{1,4,5}
不是指针

您需要使
p
成为一个数组:


由于这种更改,您还必须更改
func
函数参数,因为
p
现在将衰减为指向数组的指针,类型为
int(*)[3]
(也就是说,
func
的参数应该是
int(*p)[3]

问题是
p

根据这一定义:

int *p[4];
这是指向
int
的指针的4元素数组
我猜你想要这个:

int (*p)[3];
指向
int
s的3元素数组的指针。
要使用初始化,还需要一个数组


以下是。

这将起作用,但是您将丢失阵列信息,因为它们将:


@路人为什么?这是另一种修复方法。不漂亮,但正确。@MarekR Not pretty本身就已经够糟糕的了,它更难读取,而且一旦数组大小变大,它几乎是不可恢复的。其他问题包括它丢弃数组上的类型信息,不声明数组大小应该一致,可能破坏缓存因为数组可能是连续的,也可能不是连续的,还有一个指针悬空的机会。你为什么不使用多维数组?你会让它通过代码审查吗?所有这些都不会使它不正确,但会让它难看和不最优。@MarekR我没有争论它的正确性。作为回答,我希望它至少在坏的方面是中性的ness scale,你毕竟是在建议人们这样做。@路人谢谢你的评论,但是我们知道这是OP想要的,4个指针的数组,只是不知道如何构造它。函数参数和内容表明,在这种情况下数组衰减不是问题。不过,我在答案中添加了警告,以使y你很高兴。
int (*p)[3];
int arr1[] = { 1,4,5 };
int arr2[] = { 3,5,6 };
int arr3[] = { 6,6,2 };
int arr4[] = { 6,5,3 };

int *p[4] = { arr1, arr2, arr3, arr4 };