2014-10-02 39 views
0

我意识到在C++中我不能初始化doublememset的数组。对于整数阵列,我可以很容易地初始化该阵列使用:如何在C++中初始化一个双精度数组?

int* a = new int[n]; 
memset(a, n*n, n*sizeof(int)); 

但我怎么能初始化C++中的双打数组?

long double* d = new long double[n]; 
memset(d, n*n, n*sizeof(long double)); // does not work 
+4

尝试['std :: fill'](http://stackoverflow.com/q/8848575/) – Nemo 2014-10-02 01:18:48

+0

为什么不使用通用初始化语法? 'auto x = new T [N] {};'仍然只有当你想初始化零时...' – Deduplicator 2014-10-02 01:20:01

+0

@Nemo fill用于'std :: arrray',是否用于我的c风格数组? – orezvani 2014-10-02 01:20:51

回答

-2
memset(a, n*n, n*sizeof(int)); 

这可能不是做你的期望。该文件说,值参数被转换为一个无符号的字符。每个字节将被设置为该值。当你查看包含一个int的4或8个字节时,你会得到垃圾。我已经看到的唯一有用的值是0.这将起到一个双重的作用

将数值数组初始化为已知值(如42)的唯一方法是编写一个循环

+2

“这也可以起到双重作用” - 不在可移植代码中。该规范允许用除了全零之外的其他方式表示“0.0”。 – Nemo 2014-10-02 01:28:57

+1

您不需要编写循环。使用'std :: fill' – 2014-10-02 01:31:32

+0

我知道的每一种现代CPU架构都使用IEEE浮点,其中所有字节为0表示0.0。我熟悉旧的VAX格式,但它也使用全零字节表示0.0。虽然该规范允许其他体系结构,但这并不是我担心的。 – 2014-10-02 01:36:27

相关问题