Путаница между передачей по значению и ссылкой? - PullRequest
2 голосов
/ 29 июня 2009

Может кто-нибудь объяснить, почему это не работает?

int main()
{
    float* x;
    float a, b;
    int num_vals = 10;

    fill_in_x(&x, num_vals); // malloc is called and x is populated with values

    a = x[0];
    b = x[1] - x[0];

    printf("%f\n", a);
    printf("%f\n", b);

    function_using_a_and_b(a, b); // The values of a and b used in this function 
                                  // don't match those calculated in main 
}

void fill_in_x(float** x, int num_vals)
{
    *x = (float*)malloc(num_vals * sizeof(float));

    // Fill in values for x
}

void function_using_a_and_b(float a, float b)
{
    printf("%f\n", a);
    printf("%f\n", b);
}

Чтобы повторить то, что сказано в комментариях, когда я динамически распределяю память для x в malloc в отдельной функции, затем пытаюсь передать пару значений в другую функцию, значения не передаются правильно. Это похоже на проблему с указанием, но я думал, что передаю значения a и b, а не адреса. Для справки, я даже попытался использовать memcpy, чтобы поместить значения в a и b, но это тоже не помогло.

Я заставил его работать, передав адреса a и b, а затем разыменовав их в function_using_a_and_b, но почему не работает описанный выше метод?

Заранее спасибо.

Ответы [ 11 ]

0 голосов
/ 29 июня 2009

если функция должна изменить значения данного параметра, ей нужно дать адрес. в противном случае он создаст новые локальные копии значений в a и b и изменит их.

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