八、善于利用指针——指针变量

存放地址的变量是指针变量,它用来指向一个对象(如变量、数组、函数等)。那么怎样定义和使用指针变量呢?

1、怎样定义指针变量

定义指针变量的一般形式为: 类型名 *指针变量名;
int *p1; //左端的int是定义指针变量时必须指定的“基类型”。指针变量的基类型用来指定此指针变量可以指向的变量的类型。
注意:

  1. 指针变量前面的“”表示该变量为指针型变量。指针变量名是p1,而不是p1。
  2. 在定义指针变量时必须指定基类型。
    有的读者认为既然指针变量是存放地址的,那么只须指定其为“指针变量”即可,为什么还要指定基类型呢?
    要知道不同类型的数据在内存中所占的字节数和存放方式是不同的。
  3. 使指针移动一个位置或使指针值加1,这个1代表什么呢?
    如果指针是指向一个整型变量的,那么“使指针移动一个位置”意味着移动4个字节,“使指针加1”意味着使地址加4个字节。如果指针是指向一个字符变量的,则增加的不是4而是1。因此必须指定指针变量所指向的类型,即基类型。一个指针变量只能指向同一个类型的变量,不能忽而指向一个整型变量,忽而指向一个实型变量。
  4. 一个变量的指针含义包括两个方面。
    a. 一是以存储单元编号表示的纯地址,
    b. 一是它指向的存储单元的数据类型。
  5. 在说明变量类型时不能一般地说“a是一个指针变量”,而应完整地说:“a是指向整型数据的指针变量”。
  6. 如何表示指针类型。指向整型数据的指针类型表示为“int *”,读作“指向int 的指针。
  7. 指针变量中只能存放地址(指针),不要将一个整数赋给一个指针变量。在程序中是不能用一个数值代表地址的,地址只能用地址符“&”得到并赋给一个指针变量如“p=&a;”

2、怎样引用指针变量

在引用指针变量时,可能有3种情况:

  1. 给指针变量赋值。
    如p=&a; //把a的地址赋给指针变量p
  2. 引用指针变量指向的变量。
    如果已执行“p=&a;”,即指针变量p指向了整型变量a
    则printf(“%d”,*p);//以整型形式输出指针变量p所指向的变量的值,即变量a的值
  3. 引用指针变量的值。
    如printf(“%o”,p);//以八进制形式输出指针变量p的值,如果p指向了a,就是输出了a的地址

3、指针变量作函数参数

函数的参数可以是整型 、浮点型、字符型等数据,还可以是指针类型。它的作用是将一个变量的地址传送到另一个函数中。

3.1、如果想通过函数调用得到n个要改变的值,可以这样做:

  1. 在主调函数中设n个变量,用n个指针变量指向它们;
  2. 设计一个函数,有n个指针形参。在这个函数中改变这n个形参的值;
  3. 在主调函数中调用这个函数,在调用时将这n个指针变量作实参,将它们的值,也就是相关变量的地址传给该函数的形参;
  4. 在执行该函数的过程中,通形参指针变量,改变它们所指向的n个变量的值;
  5. 在主调函数中就可以使用这些改变了值的变量。
    注意:
    a. 不能企图通过改变指针形参的值而使指针实参的值改变。
    b. 函数的调用可以(而且只可以)得到一个返回值(即函数值),而使用指针变量作参数,可以得到多个变化了的值。如果不用指针变量是难以做到这一点的。要善于利用指针法。

猜你喜欢

转载自blog.csdn.net/lijiahao1212/article/details/129981749