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。


阅读更多
换一批

没有更多推荐了,返回首页