c ++错误“类型int *的标量初始化器周围的大括号”

时间:2017-11-07 23:28:19

标签: 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                                                                   
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";
}

3 个答案:

答案 0 :(得分:2)

变量p指针的数组。 { 1, 4, 5 } 不是指针。

您需要将p数组数组

int p[4][3] = { ... };

由于这一变化,您还必须更改func函数参数,因为p现在将衰减为指向类型为int (*)[3]的数组的指针(即, func的参数应为int (*p)[3])。

答案 1 :(得分:2)

问题是p

根据这个定义:

int *p[4];

这是指向int的4个元素指针数组 我猜你想要这个:

int (*p)[3];

指向int s的3个元素数组的指针 另外要使用初始化,您需要一个数组。

这是working example

答案 2 :(得分:0)

这会有效,但是你会丢失数组信息,因为它们会decay into pointers

    var userInfo = notification.userInfo
    if let keyboardFrame = (userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue{
        print(keyboardFrame.height)
        if keyboardFrame.size.height <= 0 { // To fix bug on iOS 11
            if let newKeyboardFrame = (userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue{
                print(newKeyboardFrame.height)
            }
        }
    }
    view.layoutIfNeeded()