黑马程序员技术交流社区

标题: 入门C指针 记住这句话 [打印本页]

作者: doudou33420    时间: 2014-11-6 03:35
标题: 入门C指针 记住这句话
本帖最后由 doudou33420 于 2014-11-6 13:13 编辑

一句话  p就是地址,  *p就是p中地址上的值
例:
  1. char arr[] = "abcde";
  2.         char *p = arr;
  3.         //数组名 代表首元素的地址.  //初学者请注意分清 arr[0] 与 &arr[0]
  4.         printf("%s\n",p); //p 就是地址-----  首元素地址,  会一直输出遇到\0停止
  5.         printf("%c\n",*p); //*p 就是p中地址上的值  ------- 首元素地址上的值为'a'  故输出'a';
复制代码
思考指针的问题 很容易产生疑问,  也很容易重新推翻之前思考得出的定义.  
所以很容易弄迷惑 含糊不清到底怎样才是对的
记住这句话  对于刚入门指针  影响很大..  很多指针问题 哪怕你没弄懂 都可以从这句话推出来;
例2: 指向指针的指针
初学者听这名字就感觉很绕 好厉害的样子,

  1.         char arr[] = "abcde";
  2.         char *p = arr;
  3.         char **pp = &p; //指向指针的指针 pp    &p是 指针p的地址
  4.         char ***ppp = &pp; //指向#@@!!&$^@! (what the fuck)
复制代码



不难看出只是多了两层引用关系而已,  但乍一看 不太好理解这么多***的作用
我们来借用这句话 p就是地址,  *p就是p中地址上的值
pp里面就是p的地址 *pp里面就是p里面的地址(arr的地址) -----这时我们就能输出arr了 printf("%s",*pp)..
----------上面之所以输出要用*pp而不是用pp是因为, pp里面放的是p自己的地址 p里面才是arr的地址 而*pp里面是?

ppp里面就是pp的地址*ppp里面就是pp里面的地址(p的地址)**ppp里面就是p里面的地址(arr的地址) -----让我们来输出arr吧  printf("%s",**ppp);  同上
感觉如何, 通过上面的例子,拿出这句话是不是顺多了 有没有感觉"矮油 不错 这个叼";
二半夜的 纯手打 因为自己指针学的太马虎,  看指针的时候也是绕的头疼 总结点自己经验给处在同一阶段的朋友互相学习
管理我这可不是灌水.  别给我移走啊  顺便再给点技术分


作者: chri_liu    时间: 2014-11-6 08:59
感谢总结分享
作者: 励志入黑马    时间: 2014-11-6 09:31
感觉还是很绕
作者: doudou33420    时间: 2014-11-6 12:04
励志入黑马 发表于 2014-11-6 09:31
感觉还是很绕

把这句话记住就好多了

作者: 大米米    时间: 2014-11-6 12:56
一连串的PPP
作者: 枫叶路过123    时间: 2014-11-7 00:33
  谢谢 分享和总结  加油呀  
作者: 从今以后    时间: 2014-11-7 06:40
矮油 不错 这个叼 (wtf我也是醉了。。)
作者: caozhichao    时间: 2014-11-7 09:14
还是会有些绕
作者: doudou33420    时间: 2014-11-7 09:28
caozhichao 发表于 2014-11-7 09:14
还是会有些绕

理解这句话可以帮你理解指针呢




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2