川建军 发表于 2020-10-17 22:37:52

C++初始化数组的方法

#include <iostream>

int main(void)
{
      double (*pa) = {1, 2, 3, 4, 5}; //这会报错
      return 0;
}

有谁能说一下为啥这会报错么?是啥道理?我可以这样写么:double (*pa) = &{1, 2, 3, 4, 5}; //把这个数组的首地址赋给数组指针

C++ 的数组初始化??????????


double arr[] = {0}; // 默认全0填充

只能这样写吗??????????

要用数组指针来初始化(指向首地址),怎么写??谢谢!

double (*pa) = new double;
double arr = new double;

这两种写法有啥区别?为啥C++不允许数组声明后初始化?

double arr;
arr = {1, 2, 3, 4}; // 这样写也无法通过编译。。。为啥??

昨非 发表于 2020-10-17 22:40:35

大括号形式设置初值只能设置一个

川建军 发表于 2020-10-17 22:44:39

昨非 发表于 2020-10-17 22:40
大括号形式设置初值只能设置一个

啥?大佬能说详细点吗,先看清我的问题

川建军 发表于 2020-10-17 22:47:22

川建军 发表于 2020-10-17 22:44
啥?大佬能说详细点吗,先看清我的问题

double arr = {0}; // {0, 0, 0, 0, 0}
double arr = {1}; // {1, 0, 0, 0, 0}

是这样吗?这个当然知道。我的问题是,能不能用一个数组指针对数组初始化

比如

double (*pa) = {1, 2, 3, 4};
为啥这样写会报错呢

昨非 发表于 2020-10-17 22:48:20

川建军 发表于 2020-10-17 22:44
啥?大佬能说详细点吗,先看清我的问题

我只能肯定double (*pa) = {1, 2, 3, 4, 5};这种赋初值的方法里{}只能有一个值
至于下面你问的,c++这块我只有入门水平,不清楚的不敢乱说{:10_245:}

昨非 发表于 2020-10-17 22:49:17

@风过无痕1989 你来看看吧

川建军 发表于 2020-10-17 23:00:06

另外用new 初始化数组和直接赋值有啥区别吗?new的是在heap(堆)上进行?

川建军 发表于 2020-10-17 23:11:53

C++中
花括号{}都是用来列表初始化的吗?
比如new double{1, 3, 5, 7, 9}; //这句话中花括号内的就是列表初始化

问一下new出来的数组和直接arr = {1, 3, 5, 7, 9}有啥区别!

另外C++中,为啥不允许下面的写法(先声明,后赋值不行;必须在声明的时候就初始化好,或者只能对某个元素赋值)

double arr; // declare an array with 5 elements
arr = {1, 3, 5, 7, 9}; //这会报错!
我的理解是arr代表的是首元素的地址,所以等号两边类型不等
而Java可以直接赋值,因为Java中的数组实际上是一个“对象”,arr表示该对象的"引用"(Java中的类C封装指针),是可以直接调用的,比如arr.length这类方法都是可以直接调用的,而C/C++因为是元素地址,所以不行。我的理解正确吗?

风过无痕1989 发表于 2020-10-17 23:55:15

昨非 发表于 2020-10-17 22:49
@风过无痕1989 你来看看吧

还没下班呢

昨非 发表于 2020-10-18 00:03:15

风过无痕1989 发表于 2020-10-17 23:55
还没下班呢

啊,你是上班族啊?我以为你是学生呢

川建军 发表于 2020-10-18 01:11:10

昨非 发表于 2020-10-18 00:03
啊,你是上班族啊?我以为你是学生呢

你不也是上班吗

昨非 发表于 2020-10-18 07:36:51

川建军 发表于 2020-10-18 01:11
你不也是上班吗

我是在校学生

xieglt 发表于 2020-10-18 16:00:05

本帖最后由 xieglt 于 2020-10-18 16:18 编辑

c++里头,
只有字符串是可以这样定义,其他类型都不行。
char * pstr = "Hello,world";
这是因为 "Hello,world" 编译的时候被定义为已初始化数据,程序运行时会作为静态数据载入内存。
而且pstr 是只读的 ,想修改 pstr 里的内容,如pstr = 'A' ; 这样的代码会造成非法内存访问异常
其他类型的常量数据都不会被作为已初始化数据。
double 类型的数组初始化有以下几种方式。

double   arr = {1,2,3,4,5};
double   arr[] = {1,2,3,4,5};
double * arr = new double;
for(int i = 0 ; i < 5 ; i ++)
{
      arr = i;
}

以下几种都是错的。

double * arr = {1,2,3,4,5}         // arr没有分配内存
double * arr = new double { 1,2,3,4,5};   //arr分配了内存,但是不能这么赋初值。
页: [1]
查看完整版本: C++初始化数组的方法