我被要求编写一个C模块,它提供
void swap(struct posn *p, struct posn *q);
用于交换
a
和b
字段的函数。例子:
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/