【C语言】带你彻底理解指针(1)
创始人
2024-05-26 18:25:05
0

✨✨✨✨如果文章对你有帮助记得点赞收藏关注哦!!✨✨✨✨

文章目录

  • 指针的介绍:
  • 一、简单指针🌈
    • 1.1 指针的定义与使用
    • 1.2 指针与数组
  • 二、指针数组✨
  • 三、数组指针🌞
    • 3.1 数组指针的定义
    • 3.2 ”数组名“与”&数组名“
    • 3.3 数组指针使用
  • 四、函数指针🤓
    • 4.1函数指针的使用
  • 五、函数指针数组🚀
    • 5.1 函数指针数组的使用
    • 完结

指针的介绍:

  1. 指针是一个用来存放地址的变量,可以通过指针存放的地址找到对应位置的值,对其进行使用。
  2. 指针在32位平台下的大小是4个字节,在64位平台下是8个字节。(这是因为32位平台下内存地址是由32根地址线组成,一根地址线就是1bit,用4个字节就可以存下,而64位平台有64根地址线,需要八个字节才可以存下)。
  3. 如果对指针进行加减与解引用操作,则±的步长与解引用操作的长度由指针类型决定,指针类型是几个字节±步长与解引用就是几个字节。

一、简单指针🌈

char* pc(字符指针)

int *pi(整形指针)

float* pf(浮点型指针)

还有short…double等等,拿部分举例。

1.1 指针的定义与使用

  • 这三种指针的用法基本相同,只不过char*指针存放的是char变量地址,int型指针存放的是int变量地址,float指针存放的是float变量地址。
#define _CRT_SECURE_NO_WARNINGS 1
#include int main()
{char a = 'a';		//定义一个char类型变量char* pa = &a;	   //*号先与pa结合说明pa是一个指针类型,指向的是char型数据的地址,将a的地址给到pa*pa = 'b';			//通过pa改变a的值printf("%c", a);	// bint num = 10;		int* pnum = #*pnum = 20;printf("%d", num);float f = 9.0;float* pf = &f;*pf = 5.0;printf("%d", f);
}

我们可以使用指针对指针指向的变量进行使用(修改或输出)。

1.2 指针与数组

  • 数组名就是数组的首地址。

代码示例

在这里插入图片描述

  • 得到数组首地址可以通过指针遍历数组

代码示例

在这里插入图片描述

二、指针数组✨

指针数组就是用来装指针的数组

int p1[];   //(方便理解拿整形数组对比)p1与[]结合说明p1是数组,装的是int类型的数据
int* p2[];	//[]优先级比*高 p2先与[]结合,说明p2是一个数组 里面装的是int*类型的数据

举个例子

#include 
int main()
{int a = 0;int b = 0;int c = 0;int* arr[3] = {&a,&b,&c};		//指针数组就是数组的每个位置都存储一个地址(指针)
}

三、数组指针🌞

3.1 数组指针的定义

数组指针与指针数组名字非常相似但是却截然不同,数组指针是一个指针,指针数组是一个数组

//对比一下指针数组和数组指针
int* pa[];  	//这是指针数组,优先级问题,pa先与[]结合,说明pa是一个数组,装的是int*的数据
int (*pa)[]		//这是数组指针,()优先级更高,pa先与*结合,说明pa是一个指针,指向一个int类型的数组

3.2 ”数组名“与”&数组名“

前面说了数组名代表数组首元素地址,那&数组名呢?

代码示例

在这里插入图片描述

  • 对数组名与&数组名进行输出,发现地址一样

在这里插入图片描述

  • 对数组名与&数组名+1,发现数组名加了四个字节,而&数组名加了十六进制的28,也就是十进制的40,为整个数组的大小。

结论:数组名与&数组名地址一样,但是数组名代表的是首元素地址,而&数组名代表的是整个数组。

3.3 数组指针使用

void print(int (*pa)[3])
{for(int i=0;i<2;i++){for(int j=0;j<3;j++){printf("%d",arr[i][j]);}}
}int main()
{int arr[2][3] = {0,1,2,3,4,5};print(arr);		//二维数组首地址相当于 &(第一个一维数组)
}

四、函数指针🤓

函数指针就是指向函数的指针

  • 函数指针的定义

    • *函数返回值 (pa)(函数参数)

可以看作pa先与*结合,说明pa是个指针,指向一个函数

4.1函数指针的使用

代码示例

int add(int a,int b)
{return a+b;
}
int main()
{int (*pa)(int int) = add;int a = 3;int b = 4;printf("%d",pa(3,4));		//7
}

五、函数指针数组🚀

函数指针数组就是用来装函数指针的数组,需要注意每个函数指针数组的返回值和参数必须相同类型

  • 函数指针数组的定义

    • *函数返回值 (pa[])(函数参数)

可以看作pa先与[]结合说明pa是一个数组,每个位置装的是函数指针(地址)

5.1 函数指针数组的使用

#include 
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 div(int a, int b)
{return a / b;
}
void menu()
{printf("***************\n");printf(" 1:add 2:sub \n");printf(" 3:mul 4:div \n");printf("    0:quit   \n");printf("**************\n");
}
int main()
{int x = 0;int y = 0;int input = 0;int ret = 0;int(*p[5])(int x, int y) = { NULL, add, sub, mul, div };do{menu();printf("请选择:");scanf("%d", &input);if (input >= 1 && input <= 4){printf("输入两个数字:");scanf("%d %d", &x, &y);ret = (*p[input])(x, y);}else if (input == 0){break;}else{printf("请输入0-4的数字\n");continue;}printf("%d\n", ret);} while (input);
}

在这里插入图片描述


完结

创作不易,还请各位小伙伴多多点赞👍关注✨收藏⭐

请添加图片描述

相关内容

热门资讯

安卓子系统windows11,... 你知道吗?最近科技圈可是炸开了锅,因为安卓子系统在Windows 11上的兼容性成了大家热议的话题。...
电脑里怎么下载安卓系统,电脑端... 你有没有想过,你的电脑里也能装上安卓系统呢?没错,就是那个让你手机不离手的安卓!今天,就让我来带你一...
索尼相机魔改安卓系统,魔改系统... 你知道吗?最近在摄影圈里掀起了一股热潮,那就是索尼相机魔改安卓系统。这可不是一般的改装,而是让这些专...
安卓系统哪家的最流畅,安卓系统... 你有没有想过,为什么你的手机有时候像蜗牛一样慢吞吞的,而别人的手机却能像风一样快?这背后,其实就是安...
安卓最新系统4.42,深度解析... 你有没有发现,你的安卓手机最近是不是有点儿不一样了?没错,就是那个一直在默默更新的安卓最新系统4.4...
android和安卓什么系统最... 你有没有想过,你的安卓手机到底是用的是什么系统呢?是不是有时候觉得手机卡顿,运行缓慢,其实跟这个系统...
平板装安卓xp系统好,探索复古... 你有没有想过,把安卓系统装到平板上,再配上XP系统,这会是怎样一番景象呢?想象一边享受着安卓的便捷,...
投影仪装安卓系统,开启智能投影... 你有没有想过,家里的老式投影仪也能焕发第二春呢?没错,就是那个曾经陪你熬夜看电影的“老伙计”,现在它...
安卓系统无线车载carplay... 你有没有想过,开车的时候也能享受到苹果设备的便利呢?没错,就是那个让你在日常生活中离不开的iOS系统...
谷歌安卓8系统包,系统包解析与... 你有没有发现,手机更新换代的速度简直就像坐上了火箭呢?这不,最近谷歌又发布了安卓8系统包,听说这个新...
微软平板下软件安卓系统,开启全... 你有没有想过,在微软平板上也能畅享安卓系统的乐趣呢?没错,这就是今天我要跟你分享的神奇故事。想象你手...
coloros是基于安卓系统吗... 你有没有想过,手机里的那个色彩斑斓的界面,背后其实有着一个有趣的故事呢?没错,我要说的就是Color...
安卓神盾系统应用市场,一站式智... 你有没有发现,手机里的安卓神盾系统应用市场最近可是火得一塌糊涂啊!这不,我就来给你好好扒一扒,看看这...
黑莓平板安卓系统升级,解锁无限... 亲爱的读者们,你是否还记得那个曾经风靡一时的黑莓手机?那个标志性的全键盘,那个独特的黑莓体验,如今它...
安卓文件系统采用华为,探索高效... 你知道吗?最近安卓系统在文件管理上可是有了大动作呢!华为这个科技巨头,竟然悄悄地给安卓文件系统来了个...
深度系统能用安卓app,探索智... 你知道吗?现在科技的发展真是让人惊叹不已!今天,我要给你揭秘一个超级酷炫的话题——深度系统能用安卓a...
安卓系统的分区类型,深度解析存... 你有没有发现,你的安卓手机里藏着不少秘密?没错,就是那些神秘的分区类型。今天,就让我带你一探究竟,揭...
安卓系统铠无法兑换,揭秘无法兑... 最近是不是有很多小伙伴在玩安卓系统的游戏,突然发现了一个让人头疼的问题——铠无法兑换!别急,今天就来...
汽车安卓系统崩溃怎么刷,一键刷... 亲爱的车主朋友们,你是否曾遇到过汽车安卓系统崩溃的尴尬时刻?手机系统崩溃还能重启,但汽车系统崩溃了,...
miui系统可以刷安卓p系统吗... 亲爱的手机控们,你是否对MIUI系统情有独钟,同时又对安卓P系统的新鲜功能垂涎欲滴?今天,就让我带你...