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

标签 c pointers 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++

错误信息中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位系统)。

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

关于c - 为什么我在 C++ (C++14) 中使用指针初始化数组时出错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32223483/

相关文章:

c++ - win32 API编程问题

c - 单个变量的第二个字节的值

c - 轻量级 C 但没有 C++ 编译器

c++ - 为什么 "void operator delete(void* ptr, std::size_t size) noexcept;"没有在 gcc 4.9.0 中定义?

c++ - 解包后可变元组顺序根据数据类型发生变化

c - 打印指向整数的指针会导致段错误。为什么?

c - 在 C 中,将字符指针传递给函数并使其指向某处,这是错误的吗?

更改函数中指针引用的变量

pointers - 什么时候指针是惯用的?

c++ - 绕过显式特化的标准限制