【问题标题】:Why isn't this swap program working in C?为什么这个交换程序不能在 C 中工作?
【发布时间】:2017-12-05 10:44:56
【问题描述】:

我是 C 的新手,我正在尝试创建一个基本的交换程序,有人可以解释一下为什么下面的代码不起作用。

#include <stdio.h>

void swap (int *p1, int *p2);
    int *temp = *p1;
    *p1 = *p2;
    *p2 = temp;

int main ()
{
    int x = 10;
    int y = 20;
    int *p1 = &x, *p2 = &y;
    swap (p1, p2);

    printf ("x: %d, y: %d\n", x, y);
}

提前致谢。

【问题讨论】:

  • 启用编译器警告,你会看到问题。
  • temp 应该只是 int,而不是 int*
  • 另外,你必须用{ }写一个实际的函数...
  • 请贴出真实代码,此代码无法编译。
  • @Gaurav 代码怎么能按预期工作,甚至没有编译?

标签: c swap


【解决方案1】:

int *temp = *p1; 将无法编译(这是一个约束冲突,并且必须导致编译器诊断):您将int(不是0)分配给一个指针类型。这是不允许的。

int temp = *p1;,修正swap函数中明显的错别字——给它一个正文! - 一切都会好起来的。

【讨论】:

  • 未定义?允许来回转换
  • @StoryTeller:你对此有多大把握?例如,如果您有一个 128 位 int 和一个 48 位指针怎么办?
  • 问题是缺少显式转换,即违反约束。但是整数到指针和返回业务被很好地覆盖了。警告和所有。
  • int *temp = *p1;违反约束,必须导致编译器诊断。
  • @Gerhardh:是的,那会非常豪华。
【解决方案2】:

void 是一个子进程,它必须用大括号括起来,并且不能以分号结尾。 另一方面,正如社区所说 int * temp = * p1; 是违反约束的,它必须是 int temp = * p1;

也不是交换值,它只在输入时显示。

最后,main返回一个int,你必须指定你返回一个0,用return 0;完成

整个程序是这样的

#include <stdio.h>

void swap (int *p1, int *p2){
    int temp = *p1;
    *p1 = *p2;
    *p2 = temp;
}

int main ()
{
    int x = 10;
    int y = 20;
    swap (p1, p2);

    printf ("x: %d, y: %d\n", x, y);
    return 0;
}

【讨论】:

  • 谢谢,这真的很有帮助!
猜你喜欢
  • 2021-04-30
  • 1970-01-01
  • 2020-09-19
  • 2011-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-15
  • 1970-01-01
相关资源
最近更新 更多