gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 06:22:34 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com