【问题标题】:C: swapping two pointer valueC:交换两个指针值
【发布时间】:2018-11-21 17:41:45
【问题描述】:

我想用指针交换两个整数的值。

void swap(int *a, int *b)
{
    int *temp;
    temp = &a;

    *a = *b;
    *b = *temp;
}

为什么这不起作用?

给出的错误:

incompatible pointer types initializing 'int *' with an expression of type 'int **'

【问题讨论】:

  • 你的编译器可能已经告诉你了。如果没有,请尝试启用警告消息。
  • 是的,但为什么我不能做 temp = &a ?
  • 因为它们是不同的数据类型
  • 这使得temp 成为一个指向指针的指针,这是没有意义的。试试int temp=*a; *a=*b; *b=temp;
  • 啊,你这么说是因为a已经是一个指针了?

标签: c pointers swap


【解决方案1】:

temp 是一个指针。你想要的是一个 int 来获取 a 所指向的值。您需要将temp 更改为int

void swap(int *a, int *b)
{
    int temp;
    temp = *a;

    *a = *b;
    *b = *temp;
}

您可能需要学习一些关于 C 的教程来了解指针的工作原理。使用在线和书籍中的大量资源来解释 Stack Overflow 答案有点多。

【讨论】:

  • 我明白了。所以 &a 不存在? a 是地址所以 &a 是什么?
  • 指针变量的地址。它被称为双指针(int**)。
  • @cuckcuc &a 确实存在,但与您的问题无关。您想更改a 指向的位置的值