1.定义
指针是一个值为内存地址的变量(或数据对象)。正如char类型变量的值是字符,int类型变量的值是整数,指针变量的值是地址。
例:假设指针变量名是ptr,ptr = &a;// 把a的地址赋给ptr,或者说ptr指向a。ptr和&a的区别是ptr是变量,而&a是常量。或者说ptr是可修改的左值,而&a是右值。
ptr = &b;// 改变了ptr的指向,把ptr指向b。
2.间接运算符 *
* :后跟一个指针名或地址时,*给出储存在指针指向地址上的值.
ptr = &b;
使用间接运算符 * 找出储存在b中的值:a = *ptr;//找出ptr指向的值。
语句ptr = &b;和a = *ptr;放在一起相当于 a = b;。
3.声明指针
声明指针变量时必须指定指针所指向变量的类型。例如:
int *a; // a是指向int类型变量的指针
char *b; // b是指向char类型变量的指针
float *c, *d; // c和d都是指向float类型变量的指针
类型说明符表明了指针所指向对象的类型,星号(*)表明声明的变量是一个指针。int *a;声明的意思是a是一个指针,*a是int类型。那么a的类型就是“指向int类型的指针”。a的值是一个地址,C语言专门为指针提供了%p格式的转换说明。
指针的指向类型和数据类型的大小
例:指向int类型、char类型、double类型和float类型的指针
指针的数据类型大小在32位里面是4个字节,64位里面是8个字节,不会因为指向的数据类型而发生改变.
4、使用指针在函数中交换数值
例:swap.c
首先看函数的调用:interchange(&x, &y);该函数传递的不是x和y的值,而是它们的地址。这意味着在interchange()原型和定义中的形参a和b将地址作为它们的值。因此,应把它们声明为指针。由于x和y是整数,所以a和b是指向整形变量的指针,声明如下:
void interchange(int *a, int *b)
接下来,在函数体中声明一个交换值时必需的临时变量:int temp;
通过temp = *a;把x的值储存在temp中。a的值是&x,所以a指向x。这意味着*a可以表示x的值。
与此类似,把y的值赋给x:*a = *b; 这条语句相当于: x = y。
总结:交换x和y的值, 把x和y的地址传递给函数,让interchange()访问这两个变量。使用指针和 *运算符,该函数可以访问储存在这些位置的值并改变它们。