Понимание функций и указателей в C - PullRequest
2 голосов
/ 24 января 2010

Это очень простой вопрос, но что означает следующий прототип функции?

int square (int y, size_t * x)

какая доза size_t * означает?Я знаю, что size_t - это тип данных (int> = 0).Но как мне прочитать * прилагается к нему?Это указатель на место в памяти для х?В общем, у меня проблемы с этим, и если бы кто-нибудь мог предоставить полезную ссылку, я был бы признателен.


Спасибо всем.Я понимаю, что такое указатель, но, думаю, мне сложно понять взаимосвязь между указателями и функциями.Когда я вижу прототип функции, определенный как int sq(int x, int y), тогда мне совершенно ясно, что происходит.Однако, когда я вижу что-то вроде int sq( int x, int* y), я не могу - на всю жизнь - понять, что на самом деле означает второй параметр.На каком-то уровне я понимаю, что это означает «передавать указатель», но я недостаточно хорошо понимаю вещи, чтобы манипулировать ими самостоятельно.

Ответы [ 11 ]

0 голосов
/ 24 января 2010

Существует дополнительная интерпретация, учитывая, что это параметр функции.

Когда вы используете указатели (что-то *) в аргументе функции и передаете переменную, вы не передаете значение, вы передаете ссылку («указатель») на значение. Любые изменения, внесенные в переменную внутри функции, вносятся в переменную, к которой она относится, т.е. в переменную вне функции.

Вы все еще должны передать правильный тип - есть два способа сделать это; либо используйте указатель в вызывающей подпрограмме, либо используйте оператор & (addressof).

Я только что написал это быстро, чтобы продемонстрировать:

#include <stdio.h>

void add(int one, int* two)
{
    *two += one;
}

int main()
{
    int x = 5;
    int y = 7;
    add(x,&y);

    printf("%d %d\n", x, y);

    return 0;
}

Вот как работают такие функции, как scanf.

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