影影影影影少丶 发表于 2021-5-18 10:39:08

为什么没有传入函数的参数会被修改?

请问老哥们,为什么name3明明没有传入Shuf这个函数,但是在执行Shuf函数后name3的值被修改了呢?
下面是出的代码(删除了手牌内容输出),请老哥们帮忙看看
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

void Licen(int *);

void Shuf(int*,int*,int*,int*);

void Display(int *,int *,int *,char *,char *,char *);

void Licen(int *str)
{
      int i = 0,n;

      srand((unsigned)time(NULL));

      for(i = 0;i < 54;i ++)
      {
                str = rand()%54+1;
                for(n = 0;n < i;n ++)
                {
                        if(str == str)
                        {
                              i--;
                              break;
                        }
                }
      }
}

void Shuf(int *name1p,int *name2p,int *name3p,int *str)
{
int i,j;

      for(i = 0,j = 0;i < 54;j ++)
      {
                name1p = str;
                name2p = str;
                name3p = str;
      }
}

void Display(int *name1p,int *name2p,int *name3p,char *name1,char *name2,char *name3)
{
      int i;
      printf("%s手上的牌是:",name1);

      printf("%s手上的牌是:",name2);
       
      printf("%s手上的牌是:",name3);
}
int main()
{
      char flag;
      char name1 = {0};
      char name2 = {0};
      char name3 = {0};
      int name1p = {0};
      int name2p = {0};
      int name3p = {0};
      int str = {0};

      printf("请输入1号玩家的名字:");
      scanf("%s",&name1);
      printf("请输入2号玩家的名字:");
      scanf("%s",&name2);
      printf("请输入3号玩家的名字:");
      scanf("%s",&name3);

      printf("%s,%s,%s\n",name1,name2,name3);

      do{
                printf("方=方角,梅=梅花,红=红桃,黑=黑桃\n");
                Licen(str);
                Shuf(name1p,name2p,name3p,str);
                printf("name3 = %s\n",name3);
                Display(name1p,name2p,name3p,name1,name2,name3);
                printf("重新洗牌(Y/N)?");
                getchar();
                scanf("%c",&flag);
      }while(flag == 'Y');

       return 0;
}

人造人 发表于 2021-5-18 10:39:09

认真一点
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

void Licen(int *);

void Shuf(int*,int*,int*,int*);

void Display(int *,int *,int *,char *,char *,char *);

void Licen(int *str)
{
      int i = 0,n;

      srand((unsigned)time(NULL));

      for(i = 0;i < 54;i ++)
      {
                str = rand()%54+1;
                for(n = 0;n < i;n ++)
                {
                        if(str == str)
                        {
                              i--;
                              break;
                        }
                }
      }
}

void Shuf(int *name1p,int *name2p,int *name3p,int *str)
{
int i,j;

      for(i = 0,j = 0;i < 54;j ++)
      {
                name1p = str;
                name2p = str;
                name3p = str;
      }
}

void Display(int *name1p,int *name2p,int *name3p,char *name1,char *name2,char *name3)
{
      int i;
      printf("%s手上的牌是:",name1);

      printf("%s手上的牌是:",name2);
      
      printf("%s手上的牌是:",name3);
}
int main()
{
      char flag;
      char name1 = {0};
      char name2 = {0};
      char name3 = {0};
      //int name1p = {0};       // 14个?
      //int name2p = {0};
      //int name3p = {0};
      int name1p = {0};
      int name2p = {0};
      int name3p = {0};
      int str = {0};

      printf("请输入1号玩家的名字:");
      scanf("%s",name1);
      printf("请输入2号玩家的名字:");
      scanf("%s",name2);
      printf("请输入3号玩家的名字:");
      scanf("%s",name3);

      printf("%s,%s,%s\n",name1,name2,name3);

      do{
                printf("方=方角,梅=梅花,红=红桃,黑=黑桃\n");
                Licen(str);
                Shuf(name1p,name2p,name3p,str);
      printf("%s,%s,%s\n",name1,name2,name3);
                printf("name3 = %s\n",name3);
                Display(name1p,name2p,name3p,name1,name2,name3);
                printf("重新洗牌(Y/N)?");
                getchar();
                scanf("%c",&flag);
      }while(flag == 'Y');

       return 0;
}

人造人 发表于 2021-5-18 10:51:38

执行完Shuf函数后,你再输出name3看看
没有修改呀,是dev++的问题吧

影影影影影少丶 发表于 2021-5-18 11:26:27

人造人 发表于 2021-5-18 10:51
执行完Shuf函数后,你再输出name3看看
没有修改呀,是dev++的问题吧

这是在linux上执行的结果

影影影影影少丶 发表于 2021-5-18 11:55:57

人造人 发表于 2021-5-18 11:51
认真一点

谢谢老哥。我把Shuf函数里面的循环条件改成了j<14
页: [1]
查看完整版本: 为什么没有传入函数的参数会被修改?