指针指向指针小结(适合刚接触C指针的新手)
来源:互联网 发布:公务员和程序员 编辑:程序博客网 时间:2024/05/17 20:29
指针是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的时候,只是学到数组就没有用功继续去学了,到了大二开始学习数据结构的时候看见指针+结构体+伪代码!就硬生生给自己吓退了!很多像我这样的初学者,越学越没意思就放弃了。希望这篇文章能给新手多少有点帮助。共勉!
0 0
- 指针指向指针小结(适合刚接触C指针的新手)
- c 指向指针的指针
- C 指向指针的指针
- C指针---指向指针的指针(转)
- c语言指针,指向指针的指针
- C指针传递,指向指针的指针。
- 【C++】指针(5):指向指针的指针
- C语言二级指针(指向指针的指针)
- C语言指针(二)指向指针的指针
- 98 C语言二级指针(指向指针的指针)
- C语言中的指针(指针数组 数组指针 函数指针 函数指针数组 指向函数指针数组的指针)
- 指向指针的指针
- 指向指针的指针
- 指向指针的指针
- 指向指针的指针 **
- 指向指针的指针
- 指向指针的指针
- 指向指针的指针
- 全局变量/局部变量
- 证书过期,影响App Store已经上架的应用吗?
- vc_red.msi 报错 (vc++ 版本)
- android:process=":remote"属性
- 文章标题
- 指针指向指针小结(适合刚接触C指针的新手)
- AMQP学习 & RabbitMQ 与 ActiveMQ、ZeroMQ以及Kafka的比较
- str()和represent()的区别
- 【ZOJ3949 The 17th Zhejiang University Programming Contest B】【树形DP】Edge to the Root 树上加一边 根距离之和尽可能小
- 总结CMake的常用命令,并介绍有用的CMake资源
- 用安卓写一个便签程序
- maven添加jar包到本地仓库及到项目中
- Java GC
- NavigationView 5.0属性新控件