对于指针(一级指针)的理解(本人学生一枚,文中如有理解错误,欢迎指正,大家互相学习)
来源:互联网 发布:电脑估价软件 编辑:程序博客网 时间:2024/05/31 13:15
指针(一级指针)是指向普通变量的指针(一级指针保存着普通变量的地址);
int *a = NULL; //空指针int c = 5; //变量c现在保存着5(这么写是为了大家理解指针)a = &c; //指针a指向变量c的地址(指针变量a现在保存着c的地址值)
执行完这三句,*a == 5
解释:*a表示对指针变量a进行解引用(找到a中保存的的地址,也就是变量c的地址,然后将此地址中的数据拿出来就是*a)
总结:
int *a = NULL;或者char *b = NULL;其实系统都会为指针变量a和b分配相应的内存空间,
且他俩分配的内存空间大小是一样的,都是用来存储地址值,
&a表示指针变量a的地址,a表示a指向的变量的地址,*a表示a指向的变量的值
所有的指针变量等于指针变量的地址的解引用:a = *(&a); 因为*(&a)表示:地址&a中存储的值
以下再通过四个例子,让大家理解一下指针(每张图片中左侧为代码,右侧为运行结果)
1.
2.
解释说明:主函数中SB(&a),将变量a的地址传递给SB中的b(b指向a的地址)。
1中*b=c;表示将c的数值5赋给b指向的地址,所以*b=c=5,b指向变量a的地址,所以a=*b=c=5.
2中b=&c;表示将c的地址给b(b指向c的地址),所以b不再指向a的地址,所以*b=c=5,a=0。
3.
3中a是个指针变量,而且指向一个空地址,所以SB(a)是将一个空地址给b,
相当于指针变量a b都没有指向有效的地址,
所以进行*b=c,将c的值5传递给b的指向的地址,访问了b指向的地址就会程序崩溃。
4.
4与2比较类似,b本来指向a的地址(空地址),b=&c后,b指向c的地址,所以*b=c = 5;
又因为a是个指针变量,而且指向了一个空地址,所以不能进行解引用(不能访问a指向的地址)
所以执行*a,程序就会崩溃
就写这么多吧,欢迎大家指正!
3中a是个指针变量,而且指向一个空地址,所以SB(a)是将一个空地址给b,
相当于指针变量a b都没有指向有效的地址,
所以进行*b=c,将c的值5传递给b的指向的地址,访问了b指向的地址就会程序崩溃。
阅读全文
0 0
- 对于指针(一级指针)的理解(本人学生一枚,文中如有理解错误,欢迎指正,大家互相学习)
- 对于一级指针的小小理解
- 自加自减运算符的错误使用和理解【个人学习笔记,如有错误欢迎指正】
- 将本地项目放到Github上(应该可以这么说)[如有错误欢迎大家批评指正]
- 关于指针的一点理解(本人小白用户)
- 关于微软的OBA架构理解(欢迎大家批评指正^_^)
- 一级指针简单理解
- 个人对指针的理解,欢迎大家批评
- 关于一级指针和二级指针的部分理解(I)
- 理解C指针:(一)指针初探
- RequisiteWeb的理解,欢迎指正
- 对指针、引用的理解(一)
- 剑指Offer22题栈的压入、弹出序列 java解答(如有错误欢迎批评指正)
- 指针学习的新理解一
- 深入理解指针以及二级指针(指针的指针)
- 关于一维数组、二维数组、一级指针、二级指针、指针数组、数组指针、空指针、字符指针、const的个人理解
- 对于数组和指针的理解
- 对于数组与指针的理解
- ZCMU 1053: Master-Mind Hints
- POJ 3164 Command Network(最小树形图 朱刘算法)
- 转战VR设计开发
- RecyclerView,ItemDecoration进阶使用!!!
- ReactNative开发之50个项目分享
- 对于指针(一级指针)的理解(本人学生一枚,文中如有理解错误,欢迎指正,大家互相学习)
- SQL server经典查询语句
- UVA 11149-Power of Matrix
- LightOJ
- 2017.8.15
- Redis-RedisTemplate 缓存操作具体实现代码
- checkbox 选择
- 二、maven项目的搭建
- Linux常用命令大全