C语言指针的了解与运用

前言:
学习C语言,不可跳过的一个难点就是对于指针的学习,相信大家也对指针具体是个啥玩意感到困惑过(博主以前学习指针的时候也是一直弄不懂,对它真的就 是深恶痛绝),下边我们来聊一下和为指针:指针顾名思义,就是指向某一个东西,在内存当中,内存是被分成一块一块的区域,每一块区域有一个唯一标识的编号,拿32位操作系统举例,就是在内存中划分32块区域,每块区域都有着它相对应的编号,而我们正常情况当中要如何去使用这块区域呢,这个时候就得用到指针了,声明一个指针变量指向这块区域,就相当于每个酒店里边的房间都有它相对应的房间号,同理,在内存中,指针则表示该区域的编号,所以又可以说指针里边就是地址,它是指向一个地址的

指针的分类:

	C语言中有着许多不同类型的数据,如(int,char,double,float等),此时也需要有着不同类型的指针来对应指向不同类型的数据,指针又分为:
	1. 一级指针(字符指针,整形指针等)
	2. 二级指针(存放一级指针的地址)
	3. 指针数组(存放指针的数组)
	4. 数组指针(指向数组的指针)
	5. 函数指针数组(存放函数指针的数组)

一级指针:

	一级指针包括很多,比如整形指针,字符指针,浮点型指针等,这里拿整形指针举例给大家了解一下:
int main()
{
	int a = 20;   //a的类型为int
	int* p = &a;  //此时指针p的类型对应则为int* 其余类型同理
	printf("%d\n", *p);
}

二级指针:

	二级指针是用来存放一级指针的地址的,此处借用上边例子给大家理解一下:
int main()
{
	int a = 20;
	int* p = &a;
	int** p1 = &p;   //取出指针p的地址,存放在二级指针p1中 int**是二级指针
	printf("%d\n", *p);
	printf("%p", *p1);  //%p以十六进制输出地址
}

指针数组:

	指针数组存放指针的数组,顾名思义,就是数组当中的元素为指针,举例:
int main()
{
	int a = 20;
	int b = 10;
	int* p = &a;
	int* p1 = &b;
	int* arr[] = { p,p1 };    //指针数组,里边的每一个元素类型为int*
	for (int i = 0; i < 2; i++)   //指针数组的输出
	{
		printf("%d ", *(arr[i]));
	}
}

数组指针:

	数组指针是指向一个数组的指针,如一个数组int arr[4]={0},则指向该数组的指针为,首先我们要思考两个问题,我们该用什么样的数据类型来接收这个数组呢,答案是用该数组的类型来接收,arr的类型为int[4],所以指针p可以写成 int (*p)[4]=&arr,举例:
int main()
{
	int arr[4] = { 1,2,3,4 };
	int(*p)[4] = &arr;
	
}

在这里插入图片描述
此处调试可以发现指针p的类型和我们上边所讲的一样

函数指针数组:

	数组是指存放一系列相同类型的元素,而函数指针数组则是将函数的地址存放在数组当中
	那么函数数组又是如何定义的呢,还是和上边一样,先确定函数的类型,然后定义,举个例子:
int Sum(int n, int m)
{
	return n + m;
}
int Mul(int n, int m)
{
	return n - m;
}
int main()
{
	int a = 20;
	int b = 10;
	//函数的类型是:int xxx(int, int)
	//则定义一个大小为2的函数指针数组
	int (*pf[2])(int, int) = { Sum,Mul };
}

(今日分享到此结束,感谢支持Thanks♪(・ω・)ノ!!!)

  • 18
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

糟糕喔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值