daqiao 发表于 2017-6-16 20:03:14

零基础学习C语言。

本帖最后由 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的值为什么能调换过来,请大虾帮忙解释一下。谢谢!

Charles未晞 发表于 2017-6-16 22:11:47

最直白的理解就是,程序中的数据均要保存在计算机的内存地址里,需要用到时再从地址里取出来。我想表达就是在程序中,地址相当于全局变量(不知道是否恰当的比喻。。。)。指针指向地址,对地址中的内容进行交换,那么就相当于对所有指向这个地址的变量内容进行了交换,也就是不需要返回值就进行了数据交换。

ba21 发表于 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

如下图:

daqiao 发表于 2017-6-17 18:35:34

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

谢谢,你讲的很详细,还弄了个图。真的很感谢。
页: [1]
查看完整版本: 零基础学习C语言。