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

如何用指针实现scan_card函数向play_card返回三个输入数值?

用指针/数组实现多值回传的解决方案

嘿,我来帮你搞定这个问题~先看看你代码里的几个小问题:

  • 函数调用写错啦:play_scanner(card_array) 应该是 scan_card(card_array)
  • scan_card 里的 card_one、card_two、card_three 根本没声明,编译器肯定会报错
  • 你定义的 card_array[] = {0} 只有1个元素的空间,完全存不下3个整数呀

接下来给你两种可行的实现方式,选哪种看你代码的结构需求:

方式一:用数组传递(推荐,适合批量数据)

这种方式直接把能装下3个整数的数组传给scan_card,在函数里直接给数组元素赋值,调用方play_card就能直接拿到结果。

修正后的完整代码:

#include <stdio.h> // 别忘了加这个头文件,scanf依赖它

void play_card(void) {
    // 定义一个能存3个整数的数组
    int card_array[3]; 
    // 调用scan_card,数组名本身就是指向首元素的指针,直接传就行
    scan_card(card_array);
    
    // 现在就能用这三个值啦
    printf("拿到的三张牌:%d, %d, %d\n", card_array[0], card_array[1], card_array[2]);
}

// 扫描用户输入的三个数字,存入传入的数组
void scan_card(int card_array[]) {
    // 直接给数组元素赋值,因为card_array指向play_card里数组的首元素
    scanf("%d %d %d", &card_array[0], &card_array[1], &card_array[2]);
}

// 测试用的主函数
int main() {
    play_card();
    return 0;
}

为啥这么写能行?

  • 数组名作为参数传递时,会自动退化为指向第一个元素的指针,所以scan_card里操作card_array[0],其实就是在修改play_card里数组的第一个元素,相当于直接把值写回去了
  • 一定要保证数组有足够的空间,这里定义int card_array[3]刚好能装3个整数

方式二:用三个独立的指针参数

如果你想保留play_card里的三个单独变量(card_one、card_two、card_three),那可以把这三个变量的地址传给scan_card,通过指针直接修改它们的值。

代码示例:

#include <stdio.h>

void play_card(void) {
    int card_one, card_two, card_three;
    // 用&取变量的地址,把地址传给scan_card的指针参数
    scan_card(&card_one, &card_two, &card_three);
    
    printf("拿到的三张牌:%d, %d, %d\n", card_one, card_two, card_three);
}

// 接收三个int类型的指针,通过指针修改原变量的值
void scan_card(int *p1, int *p2, int *p3) {
    scanf("%d %d %d", p1, p2, p3); 
    // 这里不用加&哦,因为p1本身就是地址,scanf要的就是变量的内存地址
}

int main() {
    play_card();
    return 0;
}

这个逻辑也很简单:

  • &card_one拿到card_one的内存地址,把这个地址给scan_card里的p1指针,p1就指向play_card里的card_one了
  • 调用scanf时直接传p1,就是把输入的值写到p1指向的内存空间,也就是直接修改了play_card里的card_one变量

这两种方式都能完美实现你要的“把三个数值传递回play_card函数”的需求,你可以根据自己的代码结构选合适的~

内容的提问来源于stack exchange,提问作者Zoey Malkov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:16:05