1.指针是什么?
很多小伙伴可能对C语言的指针有误解,以为指针看起来很复杂,其实不然,其实指针是内存中一个最小单元的编号,也就是地址。平时口语中说的指针,通常指的是指针变量,是用来存放内存地址的变量。
我们可以通过&(取地址操作符)取出变量的内存起始地址,把地址放到一个变量中,这个变量就是指针变量。
总结:指针变量,用来存放地址的,地址是唯一标示一块空间的。而且指针大小在64位平台是8个字节;在32位平台下是4个字节。cao
2.指针和指针类型及解引用
![](https://i-blog.csdnimg.cn/direct/5910858b459b4e8abd8f21efd9e86609.png)
![](https://i-blog.csdnimg.cn/direct/cdfc54be27f748cd916c246573942366.png)
![](https://i-blog.csdnimg.cn/direct/5ae5e934c83846e9a274c038842e8a61.png)
![](https://i-blog.csdnimg.cn/direct/749f69fb30084299b580aeb9ff1aabcd.png)
![](https://i-blog.csdnimg.cn/direct/219ccfda6198441d949617e47167756e.png)
![](https://i-blog.csdnimg.cn/direct/a75b335593a14d56ad7c3c91902bbe32.png)
![](https://i-blog.csdnimg.cn/direct/840db4a268cb49238656c7960d0649a1.png)
8.数组指针
指向数组的指针;
列如:int (*p)[10];p就是数组指针,p可以指向一个数组,该数组有10个元素,每个元素是int类型
说到这里,我们就大概知道l:
整型指针是用来存放整型的地址;
字符指针是用来存放字符的地址;
数组指针是用来存放数组的地址的;
用于二维数组传参:
9.函数指针
也就是指向函数的指针;
10.函数指针数组
把函数和指针放在数组中,其实就是函数指针数组
列如:
int(*pf)(int,int)=Add;//函数指针
int (*arr[4])(int,int)={Add,SUb,Div};//函数指针数组
下面我们写一个简单的计算器:实现加减乘除
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int Add(int x, int y)
{
return x + y;
}
int Sub(int x, int y)
{
return x - y;
}
int Mul(int x, int y)
{
return x* y;
}
int Div(int x, int y)
{
return x/y;
}
void meau()
{
printf("***********************\n");
printf("****1.Add 2.Sub*******\n");
printf("****3.Mul 4.Div*******\n");
printf("****0.exit ****************\n");
}
int main()
{
int input = 0;
int x = 0;
int y = 0;
int ret = 0;
int (*pfarr[5])(int, int) = { 0,Add,Sub,Mul,Div };
do
{
meau();
printf("请输入input:");
scanf("%d", &input);
if (input == 0)
{
printf("退出计算器");
}
else if (input >= 1 && input <= 4)
{
printf("请输入两个操作数");
scanf("%d %d", &x, &y);
ret = pfarr[input](x, y);
printf("%d\n", ret);
}
else
{
printf("选择错误");
}
} while (input);
return 0;
}
这里我们利用了函数指针数组使得程序大幅简化,而且使得程序更加模块化;这就是函数指针数组的一个运用列子。
10.回调函数
回调函数是通过函数的指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。