如何在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
相关产品推荐
相关产品推荐

