鱼C论坛

 找回密码
 立即注册
查看: 4365|回复: 13

指针的入门问题,求解决

[复制链接]
发表于 2013-4-5 19:46:43 | 显示全部楼层 |阅读模式

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

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

x

  1. /*
  2. ————————————————————
  3. 2013年4月5日19时38分34秒
  4. 利用指针交换a和b的值
  5. ————————————————————
  6. */
  7. #include <stdio.h>
  8. #include <iostream>
  9. void swp(int * p, int * q)
  10. {
  11. int t;
  12.    t = * p; //这里有些不明白,就是为什么p = a 的地址,而*p = a
  13. * p = * q;
  14. * q = t;
  15. }
  16. int main(void)
  17. {
  18. int a = 3;
  19. int b = 5;
  20. swp(&a, &b);
  21. printf("a=%d b=%d\n", a, b);
  22. system("pause");
  23. return 0;
  24. }
  25. /*
  26. 结果:
  27.      a=5 b=3
  28.      请按任意键继续. . .
  29. */
复制代码

哪位高人会的话,请您解释仔细一点,本人基础差
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-4-5 19:53:58 | 显示全部楼层
/*
————————————————————
2013年4月5日19时38分34秒
利用指针交换a和b的值
————————————————————
*/
#include <stdio.h>
#include <iostream>
void swp(int * p, int * q)/*这里定义swp函数的形参是两个指针,*/
{
int t;
   t = * p; //这里有些不明白,就是为什么p = a 的地址,而*p = a
* p = * q;
* q = t;
}
int main(void)
{
int a = 3;
int b = 5;
swp(&a, &b);/*这里是把a和b的地址传给p和q*/
printf("a=%d b=%d\n", a, b);
system("pause");
return 0;
}
/*
结果:
     a=5 b=3
     请按任意键继续. . .
*/
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-4-5 20:03:07 | 显示全部楼层
证明:int  i;/*定义一个整数类型的对象 i*/
         int *p;/*定义一个存放整数地址的指针*/
         p=&i;/*把整数i的地址放到指针P里面*/
结论:*p=i;
       *号在指针中有两个作用,1.定义的时候,表示说明。如上:int *p
                                          2.赋值得时候,表示读取这个地址里面的值,*p=i;
回去好好看下C语言的书,这里确实有点难理解。
         
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2013-4-5 20:14:00 | 显示全部楼层

谢谢你,不过我还是有点迷糊
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-4-5 20:15:04 | 显示全部楼层

  1. #include <stdio.h>
  2. #include <iostream>
  3. void swp(int * p, int * q)  //在main函数中有swp(&a,&b),有p=&a,q=&b这样一个过程-------->4
  4. {
  5.    int t;----------------------------------------------------------------------------->5
  6.    t = * p;  //相当于==>t=a      *p表示取值得意思,p里存放的是a的地址,所以*p==a ------->6
  7.    * p = * q;//相当于==>a=b----------------------------------------------------------->7
  8.    * q = t;  //相当于==>b=t----------------------------------------------------------->8
  9. }
  10. int main(void)
  11. {
  12.     int a = 3;//---------------------------------------------------------------------->1
  13.     int b = 5;//---------------------------------------------------------------------->2
  14.     swp(&a, &b);  //声明函数&a表示取a的地址,&b表示取b的地址.  ------------------------>3
  15.     printf("a=%d b=%d\n", a, b);------------------------------------------------------>9
  16.     system("pause");
  17.     return 0;
  18. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-4-5 20:36:59 | 显示全部楼层
gj113669 发表于 2013-4-5 20:14
谢谢你,不过我还是有点迷糊

个人推荐一本书给你看下蒋光远老师编的《C程序设计快速进阶大学教程》,这本里面的指针那节讲的比价好理解,你可以看下
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2013-4-5 22:28:58 | 显示全部楼层
hzx13888566458 发表于 2013-4-5 20:36
个人推荐一本书给你看下蒋光远老师编的《C程序设计快速进阶大学教程》,这本里面的指针那节讲的比价好理解 ...

谢谢你,这本书有没有电子版的,你那有吗,有的话能不能给我发个地址,我去下载
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2013-4-5 22:36:49 | 显示全部楼层
本帖最后由 gj113669 于 2013-4-5 22:38 编辑

谢谢,我好像有点明白了,是不是加上*就可以取值了,但是就算是* P把a的值取到了,也在swp函数里完成了交换,那么它是怎么控制主函数的a和b的,如果swp函数这样写,主函数就达不到交换的目的。

  1. void swp(int i, int j)
  2. {
  3.     int t;
  4.     t = i;
  5.     i = j;
  6.     j = t;
  7. }
复制代码
如果函数是这样的话,主函数就完成不了交换,但为什么指针可以呢,我实在想不通,就像你说的指针可以取值,但是他是怎样把取回的值返回给主函数呢?求解
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-4-5 22:53:21 | 显示全部楼层
gj113669 发表于 2013-4-5 22:36
谢谢,我好像有点明白了,是不是加上*就可以取值了,但是就算是* P把a的值取到了,也在swp函数里完成了交 ...

*是取值符号,可不可以取到值,看什么情况了!怎么控制a,b的话,*p就是a了,把*p看成a的值,相同*p看成a的值,就是这样实行控制的.

你改后的就不能达到目的了.因为前面的是swp(&a, &b); 其中&a, &b是取地址.而void swp(int i, int j)中i,j不是指针,不能达到i=&a, j=&b这样的情况.

还有这个函数式不需要返回值得,它只是实现其中的动作,没有返回值!
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-4-6 15:13:07 | 显示全部楼层
你可以看看郝斌的零基础C语言入门这个知识的讲的相当不错了!
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-4-7 22:50:23 | 显示全部楼层
弱弱的问一句,像楼主用的这样的框框是怎么弄的
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2013-4-10 00:45:27 | 显示全部楼层
殇冰逝水 发表于 2013-4-7 22:50
弱弱的问一句,像楼主用的这样的框框是怎么弄的

在你发的代码前加
复制代码
就可以了
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2013-4-10 00:46:40 | 显示全部楼层
殇冰逝水 发表于 2013-4-7 22:50
弱弱的问一句,像楼主用的这样的框框是怎么弄的

在你发的代码前加“
复制代码
就可以了”
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-4-10 16:36:09 | 显示全部楼层
gj113669 发表于 2013-4-10 00:46
在你发的代码前加“就可以了”

嗯,以前总看见,现在明白了
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-8-4 13:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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