【发布时间】:2021-04-12 12:24:53
【问题描述】:
我有一个函数应该将 int 指针数组转换为双指针数组。它看起来像这样:
double* intToDouble(int len , int*x){
double* y;
y =(double*)malloc(len*sizeof(double));
for (int i=0; i<len ; i++){
y[i]=(double)x[i];
}
return y;
}
但是,当尝试使用它时,我得到一个充满浮点 0 的数组。我也会把我的打印数组函数留在这里,以防它是相关的。
void printDoubleSignal(int len, double* x) {
printf("%d: [", len);
if (len > 0) {
printf("%lf", x[0]);
for (int i = 1; i < len; i++) printf(",%lf", x[i]);
}
printf("]\n");
}
这是我尝试从 int 转换为浮点数组 10 后得到的结果:[1,2,3,4,5,0,0,0,0,0]
10: [0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000]
编辑 根据要求,以下是其余代码:
#include <stdio.h>
#include <stdlib.h>
#include <complex.h>
#include <math.h>
int* readSignal(int* len) {
int* x;
char c;
scanf("%d:", len);
x = calloc(*len, sizeof(int));
do c = getchar(); while (c != '[');
if (*len > 0) {
scanf("%d", &x[0]);
for (int i = 1; i < *len; i++) scanf(",%d", &x[i]);
}
do c = getchar(); while (c != ']');
return x;
}
void printSignal(int len, int* x) {
printf("%d: [", len);
if (len > 0) {
printf("%d", x[0]);
for (int i = 1; i < len; i++) printf(",%d", x[i]);
}
printf("]\n");
}
void printDoubleSignal(int len, double* x) {
printf("%d: [", len);
if (len > 0) {
printf("%lf", x[0]);
for (int i = 1; i < len; i++) printf(",%lf", x[i]);
}
printf("]\n");
}
int* zeroPad(int len, int* x, int n){
int i;
x = (int*)realloc(x, sizeof(int) * n);
for (i=len; i<n ; i++){
x[i]=0;
}
return x;
}
double* intToDouble(int len , int* x){
double *y;
y =(double*)malloc(len*sizeof(double));
for (int i=0; i<len ; i++){
printf("x[%d]=%lf\n",i, x[i]);
y[i]=x[i];
printf("y[%d]=%lf\n",i, y[i]);
}
return y;
}
int main()
{
int *x , len=5;
double *y;
x = readSignal(&len);
printSignal(len,x);
x = zeroPad(&len,x,10);
printSignal(len,x);
y = intToDouble(len,x);
printDoubleSignal(len ,y);
return 0;
}
编辑 2 这是输入/输出的确切文本(第一行是输入,其余是输出):
5:[1,2,3,4,5]
5: [1,2,3,4,5]
10: [1,2,3,4,5,0,0,0,0,0]
x[0]=-0.000000
y[0]=-0.000000
x[1]=-0.000000
y[1]=-0.000000
x[2]=-0.000000
y[2]=-0.000000
x[3]=-0.000000
y[3]=-0.000000
x[4]=-0.000000
y[4]=-0.000000
x[5]=-0.000000
y[5]=-0.000000
x[6]=-0.000000
y[6]=-0.000000
x[7]=-0.000000
y[7]=-0.000000
x[8]=-0.000000
y[8]=-0.000000
x[9]=-0.000000
y[9]=-0.000000
10: [0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000]
【问题讨论】:
-
Couldn't reproduce。请发布Minimal, Reproducible Example,包括这些函数的调用者。
-
问题出在您未显示的代码中。
-
@MikeCAT 我刚刚通过编辑我的整个(短)代码对其进行了更新。
-
提示:调试浮点问题时,使用
"%e"或"%g"比"%f"提供更多信息。 -
Udar,发布使用的输入(精确文本)并看到输出。是
"10: [1,2,3,4,5,0,0,0,0,0]\n"还是类似的东西?printSignal()的输出缺失。
标签: c pointers casting type-conversion