Указатели как параметры функции в C - PullRequest
1 голос
/ 14 октября 2009

У меня проблемы с тем, чтобы заставить это работать.

У меня есть переменные, инициированные в main, которые я хочу передать другим функциям, и они изменились. Я знаю, что единственный способ сделать это - с помощью указателей или объявить переменные вне основной функции. Я бы предпочел использовать указатели

Как это сделать?

например

int main(){
    int variable1 = 5;
    add(&variable1, 6);
    printf("%d", variable1);

    return 0;
}

int add(int *variable1, int addValue){
    variable1 += addValue;

    return 0;
}

Я хочу напечатать 11, но я не знаю, как эти указатели работают через другие функции

Ответы [ 3 ]

6 голосов
/ 14 октября 2009

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

void add(int *variable1, int addValue)
{
    *variable1 += addValue;
}

При вызове функции вы передаете «& variable1», что означает «указатель на эту переменную». По сути, он передается в точное место памяти variable1 в вашей основной функции. Если вы хотите изменить это, вам нужно разыменовать, поставив звездочку "* variable1 + = 6". Разыменование говорит: «теперь измените int, хранящийся в этом указателе».

Когда вы используете звездочку в своей функции def, это означает, что «это будет указатель на int». Звездочка используется для обозначения двух разных вещей. Надеюсь, это поможет!

О, а также добавьте явный тип к вызову функции:

void add(int *variable1, int addValue)
5 голосов
/ 14 октября 2009

Вы просто забыли разыменовать указатель:

*variable1 += addValue;

И все параметры функции должны иметь явный тип.

void add(int *variable1, int addValue)
1 голос
/ 14 октября 2009

... вам просто нужно *variable1 = addvalue;, это было почти правильно ... как вы только что добавили 1 к указателю, который исчез, как только add() вернул ...

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