您的位置:首页 > 其它

指针指向指针小结(适合刚接触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的时候,只是学到数组就没有用功继续去学了,到了大二开始学习数据结构的时候看见指针+结构体+伪代码!就硬生生给自己吓退了!很多像我这样的初学者,越学越没意思就放弃了。希望这篇文章能给新手多少有点帮助。共勉!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: