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

如何在C语言中利用指针让deal函数返回两个卡牌数值?

用指针实现deal函数返回两个卡牌值的方法

首先你的原代码有两个明显问题:

  • void类型的函数不能返回任何值,所以return card1, card2;完全无效——哪怕逗号表达式会取card2的值,void函数也不允许返回任何内容。
  • 不要在deal函数里调用srand(time(0)),每次调用都会重置随机数种子,连续调用deal会得到重复的随机数,应该在程序启动时只调用一次。

用指针实现的核心思路是:把要存储结果的变量的地址传给deal函数,函数内部通过指针直接修改这些变量的值,从而实现“返回”多个结果的效果。

修改后的完整代码示例:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

// 接收两个int指针,用来存储生成的卡牌值
void deal(int *card1, int *card2)
{
    // 生成1-13的随机数,通过指针赋值给外部变量
    *card1 = (rand() % 13) + 1;
    *card2 = (rand() % 13) + 1;
}

int main()
{
    // 程序启动时只初始化一次随机数种子
    srand(time(0));
    
    int c1, c2;
    // 传入变量的地址,让deal函数能直接修改它们
    deal(&c1, &c2);
    
    printf("卡牌1:%d,卡牌2:%d\n", c1, c2);
    return 0;
}

关键细节说明:

  • int *card1表示card1是一个指向int类型变量的指针,&c1是取变量c1的内存地址,把这个地址传给deal函数后,函数就能定位到外部变量的内存空间。
  • 在deal里用*card1就是访问指针指向的内存,给它赋值就相当于直接修改了外部的c1变量。
  • 这种方式不需要函数返回值,就能通过指针把两个结果传递回调用者,完全符合你用指针实现的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 10:01:00