指针指向指针小结(适合刚接触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
原创粉丝点击