簡體   English   中英

無法將 int 指針數組轉換為 function 中的雙指針數組

[英]Can't convert int pointer array to double pointer array in a function

我有一個 function 應該將 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 的數組。 我還將在這里留下我的打印數組 function 以防萬一。

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]

編輯根據要求,這里是代碼的 rest:

#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這是輸入/輸出的確切文本(第一行是輸入,rest 是輸出):

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]

您忘記接收zeroPad的結果。 function 使用realloc() ,因此傳遞的指針可能無效。 function 返回新指針,因此您必須將其分配給x

這意味着main()中的行 function

    zeroPad(5,x,10);

應該

    x = zeroPad(5,x,10);

暫無
暫無

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

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