[英]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.