指针指向指针小结(适合刚接触C指针的新手)
2017-04-12 17:02
211 查看
指针是C语言里很重要的内容,最近在学习数据结构链表的时候遇见了很烦人的指针指向指针!
首先是结构定义://单链表的结构体定义typedef struct Node { int data; struct Node *next; }Node; typedef struct Node *LinkList; //LinkList == Node*
在生成链表的时候看见了函数定义里面有一个参数定义如下:
LinkList *L; //相当于Node **L
这就彻底被整懵了,这定义都是啥意思?这么用脑子不会乱吗?
随后我在stack overflow找到了答案:(需要科学滴上网)
pointer to pointer clarification直接贴代码了:
定义一个整形变量 i ,一个整形指针变量 ip1 指向 i ,一个整形指针指针变量指向 ip1 ;
int i; int *ip1; int **ipp; i = 5; ip1 = &i; ipp = &ip1;
输出结果如下:
在这里要先说一个关于指针定义的问题:
定义指针变量可以这样写int *p;(*号紧靠变量),也可以这样写
int* p;。两种写法都对,但 是对于我们新手来说理解起来是很不一样的。第一种很容易把
*p看成一个变量,遇见
int *p = &i;的时候很容易被误以为整个变量
*p的值就是
i的地址,然后理解出错进而学不下去!第二种就很清晰,就只有
p才是变量。在《C程序设计语言》这本书里面可以看到,
*符号是一元运算符,书上的写法是第一种
int *p,但第二种写法也没错!这个地方是个坑!很坑的坑!新手上路,踩坑无数!
从运行结果很容易看出来
*ipp的值就是变量
i的地址,下面这张图能很直观看出来:
address代表变量的地址,方框内为变量本身存储的值,左边为变量名!
这些内容只是指针的冰山一角,还有很多地方值得自己用心去总结,关键是需要我们自己去实践的把代码写出来。在自己大一初学C的时候,只是学到数组就没有用功继续去学了,到了大二开始学习数据结构的时候看见指针+结构体+伪代码!就硬生生给自己吓退了!很多像我这样的初学者,越学越没意思就放弃了。希望这篇文章能给新手多少有点帮助。共勉!
相关文章推荐
- 安卓 WebView 使用小结 避免内存溢出 适合新手
- JavaScript 学习小结(适合新手参考)
- 非常适合第一次接触Web Service的新手
- JavaScript 学习小结(适合新手参考)
- 指向const对象的指针和const指针小结
- 指向指针的指针 写的非常好 适合0基础菜鸟
- C语言数组名及指向数组指针的小结
- 30分钟会用bootstrap!(适合新手,或刚接触bootstrap)
- vue2.0路由-适合刚接触新手简单理解
- 非常适合第一次接触Web Service的新手
- 黑马程序员--指向指针的指针 写的非常好 适合0基础菜鸟
- asp.net 非常简易的新闻发布系统,结合了ajax,json,Nvelocity模板引擎,只完成了一部分功能,非常适合新手看,我以前是学java方向的,刚接触.net,做的不好的别喷哈
- C++中返回指向函数的指针
- 常量指针和指向常量的指针
- 关于指向指针的指针的问题
- 指向学生类的指针
- 指向函数的指针数组
- 怎么理解指向指针的指针(双指针 **)
- 理解指向函数的指针
- 用指向函数的指针作函数参数2(c语言)