一、指针
int t | 定义整型变量 |
int *p | p为指向整型数据的指针变量 |
int a[n] | 定义整型数组a,它有n个元素 |
int *p[n] | 定义指针数组p,它由n个指向整形数据的指针元素组成 |
int (*p)[n] | p为指向含n个元素的一维数组的指针变量 |
int f() | f为返回整型函数值的函数 |
int *f() | p为返回一个指针的函数,该指针指向整型数据 |
int (*f)() | p为指向函数的指针,该函数返回一个整形值 |
int **p | p是一个指针变量,它指向一个指向整形数据的指针变量 |
二、指针与变量
三、指针与数组
指针数组
(1)定义
(2)定义形式:类型名 *数组名[数组长度]
如要将二维数组赋给一指针数组:
int *p[3];
int a[3][4];
for(i=0;i<3;i++)
p[i]=a[i];
这里int *p[3] 表示一个一维数组内存放着三个指针变量,分别是p[0]、p[1]、p[2]
所以要分别赋值。
注:指针数组常适用于指向若干字符串,这样使字符串处理更加灵活方便
数组指针
(1)定义
(2)定义形式 类型名 (*指针变量名)[数组长度]
如要将二维数组赋给一指针,应这样赋值:
int a[3][4];
int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组。
p=a; //将该二维数组的首地址赋给p,也就是a[0]或&a[0][0]
p++; //该语句执行过后,也就是p=p+1;p跨过行a[0][]指向了行a[1][]
所以数组指针也称指向一维数组的指针,亦称行指针。
注:
四、指针与字符串
(1)char* string;string="I love China!";但不可以char string[14];string="I love China!";
(2)定义字符数组后,在编译时为它分配内存单元,它有确定的地址;而定义一个字符指针,在使用前必须为其指向具体的地址;
如下面是正确的:
char *s,str[10];s=str;
五、指针与函数
指针函数
(1)定义:指针函数是指函数的返回值类型是一个指针类型,即本质是一个函数
(2)定义形式:数据类型 * 函数名(参数列表)
注:
函数指针
(1)定义:指向函数的指针
(2)定义形式:数据类型 (*指针变量名)(参数列表)
注:一般传输一函数指针,返回处理后的该指针地址
I,在给函数指针变量赋值时,只需给出函数名而不必给出参数(因为是将函数入口地址赋给函数指针,而不涉及实参与形参的结合的问题),如:
int max(int,int);
int (*p)(int,int);
p=max;
II,用函数指针变量调用函数时,只需将指针名代替函数名即可,括号中需要实参,如
int c;
c=(*p)(a,b);