簡體   English   中英

用C中的int值初始化一個雙精度數組

[英]Initialize a double array with int values in C

我現在正在學習一些c語言,必須在大學里做運動。 我需要一個應該用int值填充的double數組。 所以我有這個。

#include <stdio.h>
#include <stdlib.h>

int main( int argc, char *argv[] ) {

int size=0, i=0;

printf("Enter size of array: ");
scanf("%d", &size);

double* field = malloc(size * sizeof(double));
double value;

for(i=0; i<size; i++) {
    field[i] = i;;
}

for(i=0; i<size; i++) {
    printf("Field%i: %d\n",i, field[i]);
}

free(field);

return 0;

}

但是,當我執行它時,所有值都設置為0。

Enter size of array: 10
Field0: 0
Field1: 0
Field2: 0
Field3: 0
Field4: 0
Field5: 0
Field6: 0
Field7: 0
Field8: 0
Field9: 0

printf%d代表十進制整數 ,而不是double

所以這行:

printf("Field%i: %d\n",i, field[i]);

應該:

printf("Field%i: %f\n",i, field[i]);

使用錯誤的格式說明符是您先前未定義的行為

標准

如果任何參數都不是相應轉換規范的正確類型,則行為未定義。


還要檢查malloc的返回值。 它讓您知道分配是否失敗(返回NULL )。

David C. Rankin的評論有更多的見解

%d格式說明符正在根據計算機的字節序在內存中查找4字節( sizeof int字節)。 當您提供由符號位,歸一化指數和尾數組成的8字節( sizeof double )值時,它不知道如何處理。

printf我們可以使用%f代替%lf ,這也增加了與C99之前版本的兼容性,並且它的長度更短。 (chux指出了這一點)。

我不認為malloc函數是否為數組分配了內存。 檢查malloc的語法以及返回類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM