2016-09-27 2 views
0
short int PC = 0; 

int main() { 
    foo(&PC) ; 
} 

void foo(short int PC) { 
    PC++; 
} 

Как успешно обновить глобальную переменную ПК?Обновить глобальную переменную в C через ссылку по параметру

Примечание: ПК должен быть передан как параметр, а глобальная переменная должна быть изменена с помощью параметра.

Как вы можете сказать, я новичок в C и пытаюсь понять разницу между * и &. Любая помощь приветствуется.

+2

Если ваш компилятор не дал вам диагностического сообщения для этого кода, вам нужно будет отрегулировать, какие переключатели вы используете. (это вызывает неопределенное поведение во время выполнения, по крайней мере, из-за того, что '& PC' не имеет типа' short int') –

+0

Я не вижу точки передачи глобальной переменной в качестве параметра. – babon

ответ

4

Вам просто нужно взять аргумент как указатель:

short int PC = 0; 

void foo(short int *pc) { 
    (*pc)++; 
} 

int main() { 
    foo(&PC) ; 
} 

я переехал foo() выше main(), потому что в C вы должны объявить вещи, прежде чем они используются. Если вы предпочитаете, вы можете отправить объявление, указав void foo(); наверху и оставьте определение ниже.

+0

Aha! Вы также решили мой второй вопрос также с '(* PC) ++;'. Без окружающих parens я получал предупреждение, что заявление ничего не делало. – Nic

+2

Возможно, это поможет, если вы переименуете аргумент 'foo()'. Наличие двух вещей с одним и тем же именем («ПК») предполагает, что они - одно и то же, когда они не являются. – Peter

+0

@Peter: Хорошая точка, отредактированная. –