不理解这方面的交换,想问一下大家原因

img


想问一下大家在这个程序本代码的结果,并想咨询一下原因,我就是不理解这一块,想知道结果未交换的原因

使用第三个变量,将函数里面两个变量的值交换了一下。如果传a,b的地址,就能交换a,b的值。
输出:a=2,b=3
%d表示输出一个10进制数。

还是2和3,因为函数参数不是指针,要看到效果,可以用指针

#include <stdio.h>
void swap(int * a, int * b)
{
int t = *a; *a = *b; *b = t;
}
int main()
{
int a = 2, b = 3;
swap(&a, &b);
printf("a=%d, b=%d", a, b);
return 0;
}



```c
#include<stdio.h>
void swap(int p, int q)
//p和q叫做形参,用于接受相应的参数。p和q在接受实际参数a,b的值后,
//整个函数都只是在对p和q的值进行修改,而不涉及a,b。所以a和b的值并没有发生改变
//如果要想改变a和b的值的话,你需要掌握指针以及变量的作用域的相关知识,具体代码可以看上面那位大佬的。
{
    int t;
    t = p;
    p = q;
    q = t;
}


int main(void)
{
    int a = 2, b = 3;
    swap(a, b);//这里调用了swap函数,将a,b的值分别赋给p和q。我们把a和b叫做这个函数的实际参数。
    printf("a=%d,b=%d\n", a, b);
    return 0;
}

```

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7801180
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中
  • 除此之外, 这篇博客: 用文件函数读取文件内容出现乱码的原因及解析,文件问题(1)中的 造成此种结果出现,原因可能多种,我们要一一调试排除: 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    1. 测试是否是编译器不支持中文的输出而造成的乱码,可使用 printf(“你好!”);这样的直接输出中文的语句测试。
      如果也出现乱码,就要去调试系统编码和编译器编码之间的统一的,如果是采用的codeblocks集成开发环境,详细可参考:

    codeblocks出现中文乱码的原因及解决
  • 如果你的文件是文本文件(.txt),可以直接使用记事本查看内容是否存在,是否正确。

  • 查看你写函数的操作是否有误,一般来说,不可以自己手动打开文件进行写操作,要使用文件写的函数如(fputs();fscanf();fwrite();)等函数将信息写入文件,再用相对的文件读取出数据如(fgetc();fprintf();fread();)等。
    数据读出写入都使用一定的格式处理就不容易出问题,随便使用,可能会导致某个数据块多一个空格等多余数据,那么使用函数读出的时候,就会出现把这个数据块后面一个数据块取出的时候空格就会占一个位置就会导致后面数据都对不上号的问题。由此就出问题了,我们可以选择把文件刷新,重新严格写入新数据,再读出看看。

  • 查看自己的写入数据一块的函数是否在写完数据之后没有关闭文件
    没有关闭文件的话,刚刚写入的数据并没有进入文件,而是暂时存在缓冲区内,那么文件中没有数据,当然会输出乱七八糟的东西。这也是很多初学者曾经会犯的错误,因此括号一次性打,文件函数打开关闭一起写,也是一个好的习惯。

  • 检查自己的文件打开方式是否有误,如果是文本文件,打开方式可不加b,是二进制文件的话,必须加b.如下

  • FILE *fp1,*fp2;
    fp1=fopen("D:\\file\\ff.txt","r+");//"+"表示可读可写
    fp2=fopen("D:\\file\\cc.dat","rb+");
    

    个人经验有限,欢迎其他同学和大佬补充,相互学习~

  • 您还可以看一下 程张浩老师的微信小程序项目实战之我画你猜视频课程课程中的 你猜我画小程序功能分析和数据库设计小节, 巩固相关知识点

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^