| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1320 人关注过本帖
标题:使用new创建动态数组的问题
只看楼主 加入收藏
hffjhhh
Rank: 1
等 级:新手上路
帖 子:127
专家分:7
注 册:2019-4-10
结帖率:90.38%
收藏
已结贴  问题点数:20 回复次数:7 
使用new创建动态数组的问题
C++用new运算符创建动态数组有个特性,当在程序运行时需要数组的时候则创建它,如果不需要,则不创建。
那么怎么判断程序在运行时到底有没有创建数组呢?
比如以下这段程序,这段程序在运行的时候到底需不需要创建数组?到底有没有创建数组呢?代码如下:
程序代码:
#include<iostream>
using namespace std;
int main(void){
    double *a=new double [3];
    a[0]=2.3;
    a[1]=3.3;
    a[2]=4.3;
    cout<<"a[1]="<<a[1];
    return 0;
}
搜索更多相关主题的帖子: new 创建 运行 数组 动态 
2020-08-03 23:55
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:5 
你从哪儿听来的?

当在程序运行时需要数组的时候则创建它,如果不需要,则不创建。
这个“需要/不需要”取决于你自己,你认为需要那你就写new,你认为不需要那你就不new。与C++、与编译器无关。

到底有没有创建数组呢?
这取决于编译器的优化,但与你无关,因为无论编译器怎么优化,其外在表现都应该跟你的代码一致。
举个例子,即使编译器将你的代码优化成 int main(void) { cout << "a[1]=" << 3.3; return 0; },但你需要关心吗?不需要呀!因为优化后的代码外在行为与你原代码的外在行为一致。就像你叫外卖,别人将外卖送给你就行了,你管别人是用脚走过来的,还是开劳斯莱斯过来的。
2020-08-04 08:29
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:5 
你想说的大概是 写时拷贝
这种层面的技术对你的代码来说的透明的
你不用分析这个技术

https://zh.
2020-08-04 10:58
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:0 
不管是分析代码运行还是调试代码
这个技术都不会影响结果


https://zh.
2020-08-04 10:59
hffjhhh
Rank: 1
等 级:新手上路
帖 子:127
专家分:7
注 册:2019-4-10
收藏
得分:0 
回复 2楼 rjsp
书上有一段这样的描述:
图片附件: 游客没有浏览图片的权限,请 登录注册

图片附件: 游客没有浏览图片的权限,请 登录注册
2020-08-04 14:08
apull
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:三体星系
等 级:版主
威 望:216
帖 子:1506
专家分:9241
注 册:2010-3-16
收藏
得分:5 
程序代码:
    int b[5];    //编译时分配内存
    int *c = new int[5];    //编译时分配内存

    int *a, n;
    scanf("%d", &n);
    a = new int[n];    //根据输入的n,创建n个元素的数组,n也可以是其他方式计算出来的。
2020-08-04 15:10
Jonny0201
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:52
帖 子:488
专家分:2603
注 册:2016-11-7
收藏
得分:5 
如 @rjsp 所说, 不论编译器的行为是什么, 都和你没有关系
在 Clang 10.0.0 下, 不开优化 (-O0), 会明确调用 operator new, 也就是说发生了内存申请
但是在优化等级开到第一级 (-O1) 的情况下, 就会直接输出 0, 不会产生内存分配
GCC 的行为也是类似的
2020-08-05 00:47
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:0 
回复 5楼 hffjhhh
这段话的意思是
需要分配内存 就写new
不需要分配内存 就不写new

https://zh.
2020-08-05 10:34
快速回复:使用new创建动态数组的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.034777 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved