You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言编译错误求助:调用swap_numbers时提示expected expression

C语言数字交换代码的编译错误与传值问题修复

一、编译错误修复

你遇到的expected expression错误,根源是调用函数时错误地给参数添加了类型声明。函数调用只需要传递变量名,不需要在参数前加int。

把主函数里的:

swap_numbers(int first_num, int second_num);

改成:

swap_numbers(first_num, second_num);

就能解决这个编译报错。

二、传值调用无法修改原变量的问题解决

传值调用中,函数拿到的是变量的副本,修改副本不会影响主函数里的原变量。要实现真正的交换,必须用传址调用(传递变量的内存地址,通过指针操作原变量),具体修改步骤如下:

  1. 修改函数声明与定义的参数为指针类型,同时将返回值改为void(因为函数不需要返回数据)
  2. 函数内部通过解引用指针*来直接操作原变量的值
  3. 调用函数时用&取变量的地址传递给指针参数

修正后的完整代码

#include <cs50.h>
#include <stdio.h>

// 函数参数改为指针类型,返回值设为void
void swap_numbers(int *first_num, int *second_num);

int main(void)
{
    int first_num = get_int("Input 1st number:\n");
    int second_num = get_int("Input 2nd number:\n");
    
    // 传递变量的地址
    swap_numbers(&first_num, &second_num);
    
    printf("First_num = %i\n", first_num);
    printf("Second_num = %i\n", second_num);
}

void swap_numbers(int *first_num, int *second_num)
{
    // 解引用指针,直接修改主函数中的原变量
    int temp_num = *first_num;
    *first_num = *second_num;
    *second_num = temp_num;
}

关键修改说明

  • 指针参数int *first_num:用来接收变量的内存地址,相当于“指向”主函数里的原变量
  • 解引用操作*first_num:通过指针访问并修改它指向的原变量的值
  • 取地址符&first_num:获取变量在内存中的地址,传递给函数的指针参数

内容的提问来源于stack exchange,提问作者Renae Carter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 10:39:16