* символ в указателях C - PullRequest
2 голосов
/ 27 мая 2011

Здесь я предоставил простой код, который использует указатель.

void rets(int *px, int *py)
{
    *px = 3;
    *py = 5;
}
int main()
{
    int x, y;

    rets(&x, &y);
    printf("First is %d, second is %d", x, y);
}

Я просто хочу, чтобы он был очищен ... В объявлении: int *px, *py; выделяет два байта для хранения адреса целочисленной переменной и присваивает этому пространству хранения имя px . Он также выделяет еще два байта для хранения адреса другой целочисленной переменной и дает этому пространству имя py . Звездочки сообщают компилятору, что эти переменные будут содержать адресов и , а не значения (, если я не ошибаюсь ?), И int сообщает, что адреса будут указывать на целочисленные переменные. Но - и в этом источник большой путаницы:

*px = 3;
*py = 5;

здесь он используется немного иначе, чем в объявлениях указателей. Что это значит?

Ответы [ 3 ]

3 голосов
/ 27 мая 2011

Таким образом, в объявлении функции вы объявляете указатели на int, которые будут переданы в качестве параметров.В определении вы разыменовываете указатели, поэтому фактически используете пространство переменных, объявленное в main.Если вы не разыменовали, вы просто изменили бы указатель, а не то, на что он указывает.Когда вы вызываете rets (), вы даете адрес переменных, определенных в main, используя &.

2 голосов
/ 27 мая 2011
*px = 3;
*py = 5;

Это означает, что вы передаете значение 3 в память, указанную указателем px, а значение 5 - в память, указанную указателем py.

0 голосов
/ 28 мая 2011

в основном, '*' используется в C тремя разными способами (если я что-то пропустил), в зависимости от контекста

  1. умножение
  2. объявление переменных-указателей
  3. разыменование

давайте проигнорируем # 1.

, когда у вас есть что-то вроде

TYPE * x;

, это объявляет переменную x, которая содержит указатель на значениевведите TYPE.

, тогда как когда у вас есть

*x

, где x является указателем, это относится к тому, на что указывает x, что известно как разыменование (поскольку указатели также называются ссылками).) * * тысяча двадцать-один

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