繁体   English   中英

为什么在C ++(C ++ 14)中使用指针初始化数组时出现错误?

[英]Why am I getting error in initializing array using pointers in C++ (C++14)?

我在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++

错误消息中初始化程序的确切含义是什么?

无法使用的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位系统)。

由于初始化列表中的第n个第1arr指针将包含1。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM