03 指针篇
指针数组
#include <stdio.h>
int main()
{
static char *s[]={"black","white","pink","violent"};//指针数组4个元素分别为4个字符串地址
char **ptr[]={s+3,s+2,s+1,s};//指针的指针,分别保存第4、3、2、1个元素的地址
char ***p;//p是一个三级指针
p=ptr;//p指向数组ptr第1个元素
++p;//p指向数组ptr第2个元素
printf("%s\n",**p+1);//打印结果从数组第2个元素的第2位开始,即ink
return 0;
}
- 函数指针
函数指针本质是一个指针,其指向一个函数。
#include <stdio.h>
//函数指针
int (*fun)(int x,int y);
int add1(int x,int y)
{
return x+y;
}
int main()
{
int ret1,ret2;
fun = add1;
fun = &add2;
printf("%p\n",add1);
printf("%p\n",&add1);
ret1=(*fun)( 1, 2);
printf("ret1=%d\n",ret1);
return 0;
}
函数名等于函数首地址。
- 指针函数
一个返回指针的函数,其本质是一个函数。声明格式为:*类型标识符 函数名(参数表)
int *fun(int x,int y);
,函数名前面多了一个星号,星号优先级低于括号,fun先和后面括号结合,这个函数就是一个指针函数。其返回值是一个 int 类型的指针,是一个地址。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 指针函数 返回类型为指针
int* fun(int a, int b)
{
int *p = (int *)malloc(sizeof(int));
printf("P的地址:0x%x\n",p);
memset(p, 0 ,sizeof(int));
*p = a + b;
printf("*p = %d\n",*p);
return p;
}
int main()
{
int *p1 = NULL;
printf("P1初始化的地址:0x%x\n",p1);
p1 = fun(2, 3);
printf("P1的地址:0x%x\n",p1);
return 0;
}