13.4 指针
考点10 指针变量的定义
一个变量的地址称为该变量的“指针”。如果有一个变量专门用来存放地址,那么这个变量就是指针变量,即存放变量地址的变量是指针变量。
指针的定义格式为:
基类型 * 指针变量名
例如:
float*a; /*a是指向float型变量的指针变量*/
char*b; /*b是指向char型变量的指针变量*/
变量的前面加上符号&(如&a),表示变量的地址,所以可以将&a赋值给一个指针。例如:
#include<stdio.h>
voidmain(){
inta=0;
int*i=&a;
}
注意:(1)虽然在定义时,用int*i定义了一个指向int类型变量的指针,但是该指针的变量名仍然是i;(2)定义指针时要在*前面声明指针的类型;(3)对指针赋值时,指针的类型应与其指向的值的类型一致;(4)对于*p=a来说,p和&a表示变量a的地址,*p和a表示变量a的值;(5)p++表示地址加1,(*p)++表示指针指向的数据加1。
题型剖析:指针是C语言的重要工具,也是考试的重点,其考查形式如下。
(1)指针变量的声明,特别要注意声明时候的*号。
(2)指针变量的赋值,指针变量存储的是地址,因此在考试时要注意变量的值与地址的区别。
考点11 函数之间的地址传递
在函数一章已经讲述过,传递值不修改原参数的值,但是如果原参数是一个指针,就可以修改指针指向的内存地址中所存放的数据。例如:
#include<stdio.h>
voidchange(int*);
voidmain(){
inta=0;
int*p=&a;
change(p);
printf(“%d\n”,a);
}
voidchange(int*p){
(*p)++;
}
输出结果为1。
题型剖析:函数之间的地址传递在填空题和改错题中均有出现,考查形式如下。
(1)根据函数的实参,确定指针形参的类型,如:
int * p3,* p4;
swap(p3,p4);
void swap(int * p1,* p2) /* 实参与形参的类型要一致* /
(2)根据函数的形参,确定实参的变量名。