C语言编译错误求助:调用swap_numbers时提示expected expression
C语言数字交换代码的编译错误与传值问题修复
一、编译错误修复
你遇到的expected expression错误,根源是调用函数时错误地给参数添加了类型声明。函数调用只需要传递变量名,不需要在参数前加int。
把主函数里的:
swap_numbers(int first_num, int second_num);
改成:
swap_numbers(first_num, second_num);
就能解决这个编译报错。
二、传值调用无法修改原变量的问题解决
传值调用中,函数拿到的是变量的副本,修改副本不会影响主函数里的原变量。要实现真正的交换,必须用传址调用(传递变量的内存地址,通过指针操作原变量),具体修改步骤如下:
- 修改函数声明与定义的参数为指针类型,同时将返回值改为
void(因为函数不需要返回数据) - 函数内部通过解引用指针
*来直接操作原变量的值 - 调用函数时用
&取变量的地址传递给指针参数
修正后的完整代码
#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
相关产品推荐
相关产品推荐

