我被要求编写一个C模块,它提供

void swap(struct posn *p, struct posn *q);

用于交换ab字段的函数。
例子:
struct posn { int x; int y; };
struct posn a = {1, 2};
struct posn b = {3, 4};
swap(&a, &b);
assert(a.x == 3);
assert(a.y == 4);
assert(b.x == 1);
assert(b.y == 2);

但是,这两个*p*q都是指针,因此我编写的以下代码不起作用:
void swap(struct posn *p, struct posn *q)
{
    int temp1 = *p.x;
    int temp2 = *p.y;
    *p.x = *q.x;
    *p.y = *q.y;
    *q.x = temp1;
    *q.y = temp2;
}

如何交换指针?感谢您的帮助/建议!

最佳答案

在表达式*p.x中,.运算符的优先级高于*运算符,因此编译器将其理解为*(p.x),这是无效的,因为p不是带字段x的结构(它是指针)。您可以将其写为(*p).x,也可以使用->运算符为您执行此操作:p->x

关于c - (初学者)C语言中的指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28484741/

10-08 21:27