我意識到在C++中我不能初始化double
和memset
的數組。對於整數陣列,我可以很容易地初始化該陣列使用:如何在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
我意識到在C++中我不能初始化double
和memset
的數組。對於整數陣列,我可以很容易地初始化該陣列使用:如何在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
memset(a, n*n, n*sizeof(int));
這可能不是做你的期望。該文件說,值參數被轉換爲一個無符號的字符。每個字節將被設置爲該值。當你查看包含一個int的4或8個字節時,你會得到垃圾。我已經看到的唯一有用的值是0.這將起到一個雙重的作用
將數值數組初始化爲已知值(如42)的唯一方法是編寫一個循環
「這也可以起到雙重作用」 - 不在可移植代碼中。該規範允許用除了全零之外的其他方式表示「0.0」。 – Nemo 2014-10-02 01:28:57
您不需要編寫循環。使用'std :: fill' – 2014-10-02 01:31:32
我知道的每一種現代CPU架構都使用IEEE浮點,其中所有字節爲0表示0.0。我熟悉舊的VAX格式,但它也使用全零字節表示0.0。雖然該規範允許其他體系結構,但這並不是我擔心的。 – 2014-10-02 01:36:27
嘗試['std :: fill'](http://stackoverflow.com/q/8848575/) – Nemo 2014-10-02 01:18:48
爲什麼不使用通用初始化語法? 'auto x = new T [N] {};'仍然只有當你想初始化零時...' – Deduplicator 2014-10-02 01:20:01
@Nemo fill用於'std :: arrray',是否用於我的c風格數組? – orezvani 2014-10-02 01:20:51