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

指针(一级指针)是指向普通变量的指针(一级指针保存着普通变量的地址);
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指向的地址就会程序崩溃。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值