我个人觉得本网站的C语言指针方面讲的非常的抽象并且短。我个人不太好理解。所以,我想写一篇文章来让自己巩固巩固。
什么是指针?
指针,看名字就知道肯定指向某个东西,那这个东西到底是什么?
我们知道变量名这个东西,就是我们命名的各种代号,例如:a,b,c什么的,这些东西我们常常要给它赋值,例如:123,456之类。那么计算机怎么处理这些值呢?总不能凭空放置吧?是的,这些值占用着内存。
数据 | 内存地址 |
1 | 00000001 |
2 | 00000010 |
3 | 00000011 |
(上面的内存地址是我瞎编的啊,不要在意,只是方便我理解。)
我们会发现数据和内存之间是一一对应的关系。(好像指针没用啊?不急,等我们涉及到数组的修改和删除问题,指针就起大作用了,就是链表,这里提一下,不讲。)
那么指针存放的是数据还是地址呢?这里明确说一下,指针存放的是地址!
如何用代码表示呢?总不能直接int p;吧?电脑还以为你声明了一个变量p,类型是整形呢。
上代码演示如何声明一个指针变量(这里以整形指针变量为例)!
#include<stdio.h> int main() { int *p; return 0; }
那*是啥?*是间接引用运算符,它可以访问指针变量所指向的变量的值。啥意思呢?
我们上代码来试一下。
#include<stdio.h> int main() { int a=2; int *p=&a; //等价于int *p;p=&a;这样可能比较好理解 printf("%p\n",p); return 0; }
得到了
353a8f14
这个结果(当然每个人的电脑内存地址可能不一样)。就是数据2的内存地址了。
可以知道指针变量p存放的是数据2的内存地址,那么*p是什么呢?
#include<stdio.h> int main() { int a=2; int *p=&a; //等价于int *p;p=&a; //printf("%x\n",p); printf("%d\n",*p); return 0; }
得到
2
也就是说*p也就是a,也就是数据2。有没有恍然大悟?
总结:指针存放的是地址(指针变量存放地址,*指针变量存放数据)。
接下来上难度。既然指针变量可以指向变量,那可不可以指向数组?字符串?以至于跟函数、结构体等合并使用?
答案是可以!
我们放到后续的文章中一一描述。
(本人是新人,如有讲的不清楚的或错误的地方,还请多多指正~欢迎补充~)
0.0分
2 人评分