下面举例说明几种不同的指针类型:
一、指针变量
//格式:
//类型名 *指针变量名;
int *p;
二、一维数组与指针变量
int *p;
int a[10];
p=a; //数组名代表首地址,且是一个地址常量
三、多维数组与指针变量
int a[3][4];
/*
a+1是跳过一行。 因为二维数组名是行指针, 加1是跳过一行不是一个元素
切记:
1、只有列指针才是“真正” 指向元素, 即指向某一个元素的存储单元。
2、一维数组名表示的是列指针; 二维数组名表示的是行指针。
*/
四、函数与指向函数的指针
函数名与数组名一样, 是起始地址, 而且是一个地址常量
五、指向函数的指针变量
/*
指向函数的指针变量格式:
类型名 (*指针变量名) ();
*/
六、返回指针的函数
/*
返回指针的函数的定义方式为:
类型名 *函数名(形参列表)
{ }
*/
七、指针数组和指向指针的指针变量
/*
若一个数组的所有元素均为指针类型(地址), 则称为指针数组
格式:
类型名
int
*数组名[常量表达式];
*s[10];
*/
/*
用来存放指针变量地址的指针变量称为指向指针的指针变量
定义格式:
基类型名 **指针变量名;
*/
八、空指针
/*
指针变量可以有空值null, 即指针变量不指向任何变量, 不指向任何有用的存储单元
*/
动态分配
1.malloc()函数
//格式:
malloc(size)
/*
作用是在内存的动态存储区中分配一个长度为size个字节的连续空间, 函数返回值为一个指向分配域起始地址的指针若分配失败则返回NULL.
*/
//例如: 开辟一个用于存放struct student数据的内存空间, 并让p指向该空间.
struct student *p=(struct student *)malloc(sizeof(struct student ));
2.free()
//函数格式:
free(p);
//作用是释放用malloc() 分配的内存。