【项目任务】
编写一个程序,实现定义一个指针,使该指针指向某个变量,然后间接引用该变量。
【设计思路】
首先定义一个整型变量x和一个指针变量p,使指针p指向变量x,如图8-1所示,通过指针运算符(星号)间接引用变量x。
图8-1 变量关系图
【程序代码】
#include <stdio.h>
main()
{
int x=100;
int *p; /*定义一个指针变量p,指针的基类型为整型*/
p=&x; /*指针p指向变量x*/
printf("x=%d\n",*p); /*指针运算符间接引用变量x,*p等价于x*/
}
【运行结果】
x=100
【知识拓展】
要了解指针,首先要理解地址这个概念。什么是地址呢?数据存放在内存中,而内存是有编号的,这个内存编号就是内存地址,简称地址。对于一个变量的地址,可以通过取地址运算符获得,如变量x的地址为&x。指针是一种数据类型,和整型、实型类似。整型处理的是整数,实型处理的是实数,而指针处理的则是称为地址的数据。一个指针变量中就存放着这种地址数据。
一个指针变量中如果存放一个实体的地址,通常形象地称为该指针变量指向该实体。实体,可以是变量、数组元素或函数等,这些实体均拥有自己的内存地址。指针所指向的实体类型,称为指针的基类型。
对实体的引用,通常有两种方法:一种方法是直接引用,使用实体名直接引用实体;另一种方法是间接引用,通过指向实体的指针间接引用实体,如本案例中的*p就代表变量x的值。在使用指针运算符(星号)时,要确保指针有一个确定的地址值,否则使用起来非常危险。
【项目任务】
编写一个程序,实现定义一个普通指针和一个二级指针,使二级指针指向普通指针,普通指针指向一个整型变量。
【设计思路】
首先定义一个变量x、一个普通指针p和一个二级指针q,使指针p指向变量x,指针q指向指针p。
【程序代码】
#include <stdio.h>
main()
{
int x=100;
int *p,**q; /*定义一个普通指针p和一个二级指针q*/
p=&x; /*指针p指向一个变量x*/
q=&p; /*二级指针q指向指针p*/
printf("x=%d\n",**q); /***q等价于x*/
}
【运行结果】
x=100
【知识拓展】
定义普通指针时,变量名前只需要一个星号说明符,而二级指针前则需要两个星号说明符。两者的差别是:普通指针指向普通变量,而二级指针是指向指针变量,简称指向指针的指针。三个变量之间的关系如图8-2所示。
图8-2 三个变量之间的关系图
三个变量之间的关系如图8-2所示,*q等价于p,*p等价于x,则**q=*(*q)=*p=x。,或表示为&x=&*p=p,所有取地址运算符&和指针运算符*具有相互抵消的功能。