C语言:指针学习(一)

 C语言这门课程里,初次接触到指针这一章节时,对于指针的理解我很模糊,所以就通过程序和调试来加深对指针的理解。

Int a = 10;
Int *p = &a;

1.为了理解p和*p到底代表了什么,调试得到如下结果:


可以看到,指针变量p的值和变量a的地址相同,*p等于变量a的值。也就是说,指针等同于一个地址,解引用(*p)为该地址上内存单元存储的的值(a)。


在此基础上,又有两个新问题:

(1)解引用的改变,会对变量a产生影响吗?测试如下:

int a = 10;
int *p = &a;
*p = 100;

结果如下:


显而易见,*p赋值为100后,变量a的值也变为了100。

(2)改变指针变量p的指向,*p会变化吗?测试如下:

int a = 10;
int *p = &a;
int b = 20;
p = &b;

结果如下:


可以看到指针变量p指向了变量b,并且*p也变为了变量b的值。


2.既然指针变量p储存了变量a的地址,那么指针变量p也是有地址的,可以定义一个二级指针变量*pp指向指针变量p:

Int b = 20;
Int *p = &b;
Int **pp = &p;

结果如下:


二级指针变量*pp的解引用**pp为变量b的值。

3.那么二级指针变量*pp的改变,会影响指针变量p吗?测试如下:

Int b = 20;
Int a = 10;
Int *p = &b;
Int **pp = &p;
*pp = &a;

结果如下:


可以看到二级指针变量*pp指向变量a后,指针变量p也指向了变量a,并且解引用*p和**pp也都变为了变量a的值:10。


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值