我在 C++14 中初始化数组时遇到问题。
int *arr={1,2,3,4}; // Works in C but does not work in C++
我无法理解它显示的错误信息
prog.cpp: In function 'int main()':
prog.cpp:6:26: error: scalar object 'arr' requires one element in initializer
int *arr = {1, 22, 5, 20}; //NOT WORKING IN C++
错误信息中initializer的确切含义是什么?
无法正常工作的 C++ 代码链接 http://ideone.com/684V5t
有效的 C 中相同代码的链接 http://ideone.com/RAL3te
如果有人能解释为什么会这样,那就太好了。 谢谢。
最佳答案
这在 C++ 中不起作用,因为 arr
不是类类型的变量,因此没有 size
成员:
#include <iostream>
using namespace std;
int main() {
// your code goes here
int arr[] = {1, 22, 5, 20}; //NOT WORKING IN C++ < yes it does
cout << arr.size(); // << this does not "work" in C++
return 0;
}
顺便说一下错误信息:
prog.cpp:7:12: error: request for member 'size' in 'arr', which is
of non-class type 'int [4]' cout<<arr.size();
非常明确。
这不应该编译(或者你至少应该得到警告),无论是在 C 中还是在 C++ 中:
int *arr={1,2,3,4};
你想要这个(C 和 C++):
int arr[] = {1, 22, 5, 20};
printf("%d", sizeof(arr)/sizeof(*arr));
输出将为 4
。
在 C 中,这可能会编译,具体取决于编译器,但您应该收到警告:
#include <stdio.h>
int main() {
// your code goes here
int *arr={1,2,3,4};
printf("%d\n", sizeof(arr));
printf("%d\n", sizeof(*arr));
printf("%p\n", arr);
return 0;
}
输出是:
4
4
0x1
因为 sizeof(arr)
是 4 而 sizeof(*arr)
与 sizeof(int)
相同,因为 arr
是一个int
指针(假设是32位系统)。
由于初始化列表中的第一个 1
,arr
指针将包含 1。
关于c - 为什么我在 C++ (C++14) 中使用指针初始化数组时出错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32223483/