2016-11-12 2 views
0

У меня есть одна функция, которая принимает два аргумента указателя. Скажем, этоФункция вызова внутри функции с помощью указателей - C

void add(u16 *x, u16 *y) 

И у меня есть другая функция, которая принимает три аргумента указателя.

void fact(u16 *a, u16 *b, u16 *c){ 
    if(*c > 500){ 
     add(*a,*b); // Is this correct? 
    } 
} 

Если определенный критерий в том, соблюдено, я хочу передать аргументы а и Ь к функции добавления, но я хочу, чтобы передавать их по ссылке, а не по значению. Как я могу это сделать? a, b, c, x и y передаются из «main» с использованием «& x» при вызове функции.

Так что я хочу, чтобы все было передано по ссылке, чтобы любые изменения стоимости вернулись к основному.

спасибо!

ответ

1

добавить (* a, * b); // Это верно?

Нет, это не правильно.

Учитывая, что прототипом является void add(u16 *x, u16 *y), тогда вызывающая функция должна вызывать параметры с соответствующими типами. В fact(), a и b уже указатели, так что правильный код должен выглядеть следующим образом:

void fact(u16 *a, u16 *b, u16 *c){ 
    if(*c > 500){ 
     add(a,b); // this is correct 
    } 
} 
1

Нет, это не правильно. Мне лично легче понять, напишите ли вы * рядом с типом, а не с именем переменной.

Ваша функция add принимает два аргумента, оба являются указателями на u16, то есть они являются u16*. В вашем fact у вас есть три переменные, все из которых равны u16*. Типы уже совпадают, так что вы должны назвать его как:

add(a, b); 

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