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
大括号形式设置初值只能设置一个
啥?大佬能说详细点吗,先看清我的问题 川建军 发表于 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:44
啥?大佬能说详细点吗,先看清我的问题
我只能肯定double (*pa) = {1, 2, 3, 4, 5};这种赋初值的方法里{}只能有一个值
至于下面你问的,c++这块我只有入门水平,不清楚的不敢乱说{:10_245:} @风过无痕1989 你来看看吧 另外用new 初始化数组和直接赋值有啥区别吗?new的是在heap(堆)上进行? 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++因为是元素地址,所以不行。我的理解正确吗? 昨非 发表于 2020-10-17 22:49
@风过无痕1989 你来看看吧
还没下班呢 风过无痕1989 发表于 2020-10-17 23:55
还没下班呢
啊,你是上班族啊?我以为你是学生呢 昨非 发表于 2020-10-18 00:03
啊,你是上班族啊?我以为你是学生呢
你不也是上班吗 川建军 发表于 2020-10-18 01:11
你不也是上班吗
我是在校学生 本帖最后由 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]