存放地址的变量是指针变量,它用来指向一个对象(如变量、数组、函数等)。那么怎样定义和使用指针变量呢?
1、怎样定义指针变量
定义指针变量的一般形式为: 类型名 *指针变量名;
int *p1; //左端的int是定义指针变量时必须指定的“基类型”。指针变量的基类型用来指定此指针变量可以指向的变量的类型。
注意:
- 指针变量前面的“”表示该变量为指针型变量。指针变量名是p1,而不是p1。
- 在定义指针变量时必须指定基类型。
有的读者认为既然指针变量是存放地址的,那么只须指定其为“指针变量”即可,为什么还要指定基类型呢?
要知道不同类型的数据在内存中所占的字节数和存放方式是不同的。 - 使指针移动一个位置或使指针值加1,这个1代表什么呢?
如果指针是指向一个整型变量的,那么“使指针移动一个位置”意味着移动4个字节,“使指针加1”意味着使地址加4个字节。如果指针是指向一个字符变量的,则增加的不是4而是1。因此必须指定指针变量所指向的类型,即基类型。一个指针变量只能指向同一个类型的变量,不能忽而指向一个整型变量,忽而指向一个实型变量。 - 一个变量的指针含义包括两个方面。
a. 一是以存储单元编号表示的纯地址,
b. 一是它指向的存储单元的数据类型。 - 在说明变量类型时不能一般地说“a是一个指针变量”,而应完整地说:“a是指向整型数据的指针变量”。
- 如何表示指针类型。指向整型数据的指针类型表示为“int *”,读作“指向int 的指针。
- 指针变量中只能存放地址(指针),不要将一个整数赋给一个指针变量。在程序中是不能用一个数值代表地址的,地址只能用地址符“&”得到并赋给一个指针变量如“p=&a;”
2、怎样引用指针变量
在引用指针变量时,可能有3种情况:
- 给指针变量赋值。
如p=&a; //把a的地址赋给指针变量p - 引用指针变量指向的变量。
如果已执行“p=&a;”,即指针变量p指向了整型变量a
则printf(“%d”,*p);//以整型形式输出指针变量p所指向的变量的值,即变量a的值 - 引用指针变量的值。
如printf(“%o”,p);//以八进制形式输出指针变量p的值,如果p指向了a,就是输出了a的地址
3、指针变量作函数参数
函数的参数可以是整型 、浮点型、字符型等数据,还可以是指针类型。它的作用是将一个变量的地址传送到另一个函数中。
3.1、如果想通过函数调用得到n个要改变的值,可以这样做:
- 在主调函数中设n个变量,用n个指针变量指向它们;
- 设计一个函数,有n个指针形参。在这个函数中改变这n个形参的值;
- 在主调函数中调用这个函数,在调用时将这n个指针变量作实参,将它们的值,也就是相关变量的地址传给该函数的形参;
- 在执行该函数的过程中,通形参指针变量,改变它们所指向的n个变量的值;
- 在主调函数中就可以使用这些改变了值的变量。
注意:
a. 不能企图通过改变指针形参的值而使指针实参的值改变。
b. 函数的调用可以(而且只可以)得到一个返回值(即函数值),而使用指针变量作参数,可以得到多个变化了的值。如果不用指针变量是难以做到这一点的。要善于利用指针法。