关于指针中*操作符的使用
*操作符的作用是对指针解引用,也就是将指针中的内容提取出来
但有时候我们看到的代码中,在对指针内容进行操作的时候好像可以不用*操作符,那什么情况不用呐
正如图片中文字叙述的,在打印整体的时候,指针可以不加*操作符,打印数组中的某一个字符或者数字要加*操作符
下面将介绍指针中几个重要的知识点
1.数组指针
数组指针也就是指向数组的指针,它和整型指针,字符指针一样都是指向某一个特定对象的。
正如上面的例子显示的,arr是一个指向数组的指针,它的类型是int(*)[10],其中[]中的10表示指向的数组有10个元素,每个元素的类型是Int型。如果要通过指针变量来操作数组中的内容,方法也是一样的——找到数组中特定元素的地址,然后进行解引用操作。
2.指针数组
指针数组表示存放指针的数组,字面意思也就是一个数组中存放的不是某一个数或者字符,而是指针
通过一个例子来进一步掌握数组指针和指针数组
3.数组、指针参数
(1).一维数组参数的传递
一维数组传参有上面这几种
(2).二维数组传参
二维数组中数组名和一维数组中数组名的含义不一样。一维数组中,数组名代表首元素的地址,二维数组中数组名表示第一行的地址。如果用指针来接收这个地址的话,就该用指针数组来接受。
(3).一级指针传参
(4)二级指针传参
二级指针也就是操作一级指针的地址,在解引用的时候要加**
4.函数指针
函数指针:保存函数地址的指针叫做函数指针,函数指针首先是一个指针,然后它指向函数。所以他的类型就是这样int(*)(int,int),指针p指向的函数为int型,有两个参数。
5.函数指针数组
函数指针数组:顾名思义就是一个数组中存放的全是函数指针类型的元素
函数指针数组的作用:转移表
下面通过写计算机程序的例子来理解函数指针的作用
int add(int a, int b)
{
return (a+b);
}
int sub(int a, int b)
{
return (a - b);
}
int mul(int a, int b)
{
return (a * b);
}
int exc(int a, int b)
{
return (a / b);
}
int main()
{
//函数指针的作用:转移表
int x, y;
int input;
int ret;
do
{
printf("**************************************\n");
printf(" 1:add 2:sub \n");
printf(" 3:mul 4:exc \n");
printf("**************************************\n");
printf("请选择:");
scanf("%d", &input);
switch (input)
{
case 1:
printf("输入操作数:");
scanf("%d %d",&x,&y);
ret = add(x,y);
printf("ret = %d\n",ret);
break;
case 2:
printf("输入操作数:");
scanf("%d %d", &x, &y);
ret = sub(x, y);
printf("ret = %d\n", ret);
break;
case 3:
printf("输入操作数:");
scanf("%d %d", &x, &y);
ret = mul(x, y);
printf("ret = %d\n", ret);
break;
case 4:
printf("输入操作数:");
scanf("%d %d", &x, &y);
ret = exc(x, y);
printf("ret = %d\n", ret);
break;
case 0:
printf("选择错误\n");
break;
}
} while (input);
return 0;
}
上面是用switch语句写的计算机程序,看着是不是很冗余
下面用函数指针来实现
int add(int a, int b)
{
return (a + b);
}
int sub(int a, int b)
{
return (a - b);
}
int mul(int a, int b)
{
return (a * b);
}
int exc(int a, int b)
{
return (a / b);
}
int main()
{
//函数指针实现计算机程序
int x, y;
int input;
int ret;
int (*p[5])(int x, int y) = {0,add,sub,mul,exc}; //定义一个函数指针数组,这里的函数里面的形参可以不写,但是类型一定要写
do
{
printf("**************************************\n");
printf(" 1:add 2:sub \n");
printf(" 3:mul 4:exc \n");
printf("**************************************\n");
printf("请选择:");
scanf("%d", &input);
if (input <= 4 && input >= 1)
{
printf("请输入操作数:");
scanf("%d %d",&x,&y);
ret = (*p[input])(x, y); //这里用ret接收函数指针数组传回来的值
printf("%d\n",ret);
}
} while (input);
}
以上就是指针的详细类容