Относительно передачи указателей в качестве аргументов - PullRequest
0 голосов
/ 30 сентября 2018

Я пытаюсь закодировать базовую функцию нулевого порога.такой, что если значение элемента массива больше нуля, должно оставаться таким же, иначе оно должно быть нулевым.Но моя проблема с передачей значений массива из main в функцию с помощью указателей.Вот фрагмент.im - это входной массив, а im2 - это массив для хранения результата.t - это пороговое значение, равное 0, а m - это порядок.При передаче входного массива из основной функции в пороговую.Я только что проверил значения im в функции thresh, но все показывали 0, как прокомментировано в коде ниже, вместо исходных значений.куда я иду не так ??

int thresh(double *im[], double *im2[], int t, int m)
{
    int i, j;
    printf("im:%f", im[0]); //here i am getting output as zero instead of 1
    for (i = 0; i < m; i++)
    {
        if (im[i] > t)
            im2[i] = im[i];
        else
            im2[i] = 0;
    }
    return 0;
}

int main()
{
    float im[4] = { 1,-2,3,-4 };
    float im2[4];
    int th = 0;
    thresh((float*)im, (float*)im2, th, 2);

    getch();
    return 0;
}

1 Ответ

0 голосов
/ 30 сентября 2018

Включите предупреждения компилятора и прочитайте их.Они там, чтобы помочь.Вот что я получил при компиляции:

$ gcc main.c 
main.c: In function ‘thresh’:
main.c:10:23: warning: comparison between pointer and integer
             if (im[i] > t)
                       ^
main.c: In function ‘main’:
main.c:24:12: warning: passing argument 1 of ‘thresh’ from incompatible pointer type [-Wincompatible-pointer-types]
     thresh((float*)im, (float*)im2, th, 2);
            ^
main.c:4:5: note: expected ‘double **’ but argument is of type ‘float *’
 int thresh(double *im[], double *im2[], int t, int m)
     ^~~~~~
main.c:24:24: warning: passing argument 2 of ‘thresh’ from incompatible pointer type [-Wincompatible-pointer-types]
     thresh((float*)im, (float*)im2, th, 2);
                        ^
main.c:4:5: note: expected ‘double **’ but argument is of type ‘float *’
 int thresh(double *im[], double *im2[], int t, int m)
     ^~~~~~

Итак, есть некоторые вещи, которые нужно исправить.

Прежде всего, прототип для thresh должен быть int thresh(double *im, double *im2, int t, int m) или даже лучше int thresh(const double *im, double *im2, int t, int m)

Во-вторых, почему вы смешиваете float и double?Придерживайтесь одного и придерживайтесь double, если у вас нет действительно веской причины.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...