у меня вопрос об использовании функции указателя - PullRequest
0 голосов
/ 05 августа 2020
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
typedef struct {
    int a;
    int b;
}Point;
void Swappoint(Point*w, Point*m) {
    Point re;
    re=*w;
    *w = *m;
    *m = re;
}//@
int main(){
    Point m1 = { 1,2 };
    Point m2= { 3,4 };
    Swappoint(&m1,&m2);
    printf("%d %d %d %d", m1.a, m1.b, m2.a, m2.b);
    return 0;
}

в точке @, в этот момент я не могу понять, почему указатель w может быть повторно. re не является указателем, как точка re может быть указателем w?

Ответы [ 2 ]

1 голос
/ 05 августа 2020

Вот что происходит для каждой строки внутри функции Swappoint:

Point re;

Создайте stati c variabe для удержания точки и назовите его re.

re=*w;

Go по адресу указателя w и скопируйте значения a и b в re

*w = *m;

Take дата, на которую указывает m, и место, куда указывает w

*m = re;

возьмите данные для повторной обработки и поместите их туда, куда указывает m

Здесь, указатель m отменяется

Итак, хотя m является указателем на Point, *m - это сама точка

0 голосов
/ 05 августа 2020
void Swappoint(Point *w, Point *m) {
    Point re;
    re=*w;    // Dereferencing 'w' and assigning the value containing it into 're'
    *w = *m;  // Value of 'm' after dereference, is assigned to 'w'
    *m = re;  // Value of 're' is assigned to 'm'
}

Разыменование переменной-указателя не даст указателя в качестве результата, оно даст некоторое значение.

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