鱼C论坛

 找回密码
 立即注册
查看: 1554|回复: 3

[已解决]零基础学习C语言。

[复制链接]
发表于 2017-6-16 20:03:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 daqiao 于 2017-6-16 20:06 编辑

看视频到指针的部分。

#include <stdio.h>

int main()
{
        void swap(int *d1,int*d2);
        int a,b,*p1,*p2;
        scanf ("%d %d",&a,&b);
        p1=&a;     //把a的地址赋值给指针。
        p2=&b;
        swap(p1,p2);
        printf ("%d %d\n",a,b);

}


void swap(int *d1,int *d2)
{
        int temp;
        temp=*d1;     //取值并赋值给局部变量。
        *d1=*d2;
        *d2=temp;
}

这个函数没有返回值,为什么主函数的a,b的值为什么能调换过来,请大虾帮忙解释一下。谢谢!
最佳答案
2017-6-17 11:26:04
要知道为什么互换了a,b;首先要看你对指针了解多少。
简单的来说1:指针指向的是一个地址
                2:p1=&a; //意思是把 a 的地址赋值给p1,p1里存储是的a的地址;这里p1便指向了a;
                3:接下来你可以用指针的方式对a的内容进行取读 或 修改
                        b = *p1; // 实际就是把a的值赋值给b
                      *p1=666; // 相当于 a=666

如下图:
未标题-2.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-6-16 22:11:47 | 显示全部楼层
最直白的理解就是,程序中的数据均要保存在计算机的内存地址里,需要用到时再从地址里取出来。我想表达就是在程序中,地址相当于全局变量(不知道是否恰当的比喻。。。)。指针指向地址,对地址中的内容进行交换,那么就相当于对所有指向这个地址的变量内容进行了交换,也就是不需要返回值就进行了数据交换。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-17 11:26:04 | 显示全部楼层    本楼为最佳答案   
要知道为什么互换了a,b;首先要看你对指针了解多少。
简单的来说1:指针指向的是一个地址
                2:p1=&a; //意思是把 a 的地址赋值给p1,p1里存储是的a的地址;这里p1便指向了a;
                3:接下来你可以用指针的方式对a的内容进行取读 或 修改
                        b = *p1; // 实际就是把a的值赋值给b
                      *p1=666; // 相当于 a=666

如下图:
未标题-2.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-6-17 18:35:34 | 显示全部楼层
ba21 发表于 2017-6-17 11:26
要知道为什么互换了a,b;首先要看你对指针了解多少。
简单的来说1:指针指向的是一个地址
                2:p1=&a; // ...

谢谢,你讲的很详细,还弄了个图。真的很感谢。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-28 19:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表