对于指针(一级指针)的理解(本人学生一枚,文中如有理解错误,欢迎指正,大家互相学习)

来源:互联网 发布:电脑估价软件 编辑:程序博客网 时间: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
原创粉丝点击