1、指针变量的定义
指针是用来存储变量的地址的。
类名标识符 *指针变量名;
char * p; //p是一个指向字符类型的指针
int * numb //numb是一个指向整形的指针
2、指针赋值
int a = 10;
int *p = &a ;//将变量a的地址赋值给指针变量p
我们也可以将字符串的首地址赋值给一个字符型指针变量
char *p = "name"; //p就会保存字符串name的首地址
当指针被复制后我们就可以间接的去操作变量了
3、指针与数组
数组本就是一个指针,我们可以通过下面的代码来进行测试
#include <stdio.h>
void main()
{
char *p = "name";
printf("字符数组p[0]的地址是:%p\n",&p[0]);
printf("指针p存储的地址是:%p\n",p);
getchar();
}
执行的结果如下:
可以看到字符数组的首地址和指向字符变量的指针存储的地址是一致的。故我们不难看出数组的本质其实就是一个指针。我们可以用指针来取数组对应的值。
int a[8];
int *p = a;
那*(p+3)即数组a[3]的值;
同样也可对二位数组进行操作
int a[3][4];
int **p = a;
若想取a[2][1]的值我们就可以表示为*(*(p+2)+1)。
4、指针与结构体
我们可以定义一个指向结构体的指针
struct student
{
char *name;
int no;
}*student;
这样我们就定义了一个指向结构体的指针 可以同过 student->no 的方式来访问结构体的变量。
5、函数与指针
函数的本质是一段代码的入口地址,而指针本就是用来存储地址的,故函数指针,即指向函数入口地址的指针变量。我们可以如下来定义函数指针
int *fun(int ,int) //fun是一个指针函数 函数的返回值为指向整型变量的指针
int (*fun)(int ,int) //fun是一个指针函数 且函数返回值为指向整型变量的指针