在C语言中,将地址形象地称为“指针”。一个变量的地址称为变量的“指针”。一个专门用来存放另一个变量的地址的变量(即指针),则称它为“指针变量”。
1. 指针变量的定义
定义指针变量的一般形式:
类型名 *指针变量名,
*
指针变量名
2
,
...
;
例如:int *p,*t;
2. 指针变量的引用
指针变量中只能存放地址(指针),与指针相关的两个运算符是“&”(取地址运算)和“*”(指针运算)。
3. 指针变量作为函数参数
指针类型数据可以作为函数参数来进行传递。
【考点31】数组与指针
1.指向数组元素的指针
C语言规定数组名代表数组的首地址,也就是数组中第0号元素的地址。
定义指向数组元素的指针变量的方法,也定义指向变量的指针变量相同。
2.通过指针引用数组元素
如果指针变量p已指向数组中的一个元素,则p+1指向同一数组中的下一个元素。
3. 用数组名作为函数参数
但数组名作为参数被传递时,若形参数组中各元素发生了变化,则原实参数组各元素的值也随之变化。
如果用数组元素作为实参,情况就与变量作为参数时一样,时“值传递”方式。
4. 指向多维数组的指针和变量变量
多维数组可以看做是一维数组的延伸,多维数组的内存单元也是连续的内存单元。C语言实际上是把多维数组当成一维数组来处理的。
【考点32】字符串与指针
用字符数组存放一个字符串,然后输出该字符串。
用字符串指针指向一个字符串。用字符指针指向字符串中的字符。
2. 字符串指针作为函数参数
将一个字符串从一个函数传递到另一个函数,可以用地址传递的方法,即用字符数组名作为参数或用指向字符串的指针变量作为参数,进行传递。
3. 字符指针变量和字符数组的区别
赋值方式不同。
字符数组可以定义时对其整体赋初值,但在赋值语句中不能整体赋值。而字符指针变量即可以在定义时赋初值,也可以在赋值语句中完成。
编译时不同
【考点33】指向函数的指针
指针变量可以指向一个函数,编译时,一个函数将被分配给一个入口地址,这个入口地址就称为该函数的指针。因此,可以通过使用一个指向函数的指针变量调用此函数。
说明:
指向函数的指针变量的一般定义形式为数据类型(*指针变量名)();
在给函数指针变量赋值时,只需给出函数名而不必给出参数。
用函数指针变量调用函数时,只需将(*s)代替函数名即可(s为已经定义过的指向函数的指针变量名),在(*s)之后的括号中根据需要写上实参。
对指向函数的指针变量,有些运算,如++s、--s、s++等都是没有意义的。
【考点34】指针数组和指向指针的指针
1.指针数组的概念
若在一个数组中,其数组均为指针类型数据,这样的数组称为指针数组。
一般指针数组的定义形式为 类型名 *数组名[数组长度];
2.指向指针的指针
指向指针数据的指针变量,简称为指向指针的指针,通常称为二级指针。
定义一个指向指针变量,简称为指向指针的指针,通常称为二级指针。
定义一个指向指针数据的指针变量的形式:类型名 **a;