Понимание точечного присвоения значения C - PullRequest
0 голосов
/ 07 ноября 2018

Доброе утро / вечер всем,

Я хотел бы очистить следующую концепцию указателя,

В этом прототипе я передаю первое значение, копирующее этот первый параметр x, заданный в main, и второе, я передаю его через ссылку, так что я напрямую обращаюсь к его ячейке памяти, чтобы навсегда изменить его.

Что я не понимаю (в функции), так это то, как функция управляет значениями,

Я постараюсь быть более конкретным, я не понимаю, насколько эти задания являются "циклическими".

Например, эта функция мне кажется своего рода функцией подкачки, потому что она принимает целое число x и целое число и присваивает x значение, обозначенное y, то есть значение, указанное поочередно y + 1, и т. Д.

Так что я хотел бы знать, когда начинается и заканчивается эта последовательность назначений, чтобы понять, почему я печатаю ее в основной или в функции, которую она печатает всегда, если я не ошибаюсь {11,33,22,44 }

void Boh(int x,int *y)
{
    x = *y;
    *y = *(y+1);
    *(y+1) = x;
}

int main()
{
    int a[] = {11,22,33,44};
    Boh(a[0],&a[1]); \* (Point 1) *\
    return 0;
}

1 Ответ

0 голосов
/ 07 ноября 2018

Первое, на что нужно обратить внимание, это то, что параметр x для функции немедленно перезаписывается значением *y. Поэтому, какое бы значение ни было указано для этого параметра, оно не имеет отношения к результату.

Функция меняет местами *y и *(y + 1), используя x в качестве временного. Поскольку параметр y соответствует &a[1] в main, это первая позиция, которая будет заменена. Если вы затем поменяете &a[1] на y в выражении *(y + 1), вы получите *(&a[1]+ 1) == *((a + 1) + 1) = *(a + 2) = a[2]. Так что a[1] и a[2] меняются местами, что вы увидите, если распечатаете содержимое массива после вызова Boh.

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