C/C++指针进阶全(保姆级教学)

这篇具有很好参考价值的文章主要介绍了C/C++指针进阶全(保姆级教学)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

个人主页:点我进入主页

专栏分类:C语言初阶      C语言程序设计————KTV       C语言小游戏     C语言进阶

C语言刷题

欢迎大家点赞,评论,收藏。

一起努力,一起奔赴大厂。

目录

1.复习

1.1字符指针

1.2指针数组

1.3数组指针

1.4函数指针

2.函数指针数组

3.指向函数指针数组的指针

4.回调函数       


 文章来源地址https://www.toymoban.com/news/detail-729355.html

        前面写过指针进阶的一部分,没有看过的可以点击指针进阶详解,今天我给大家带来后半部分,以及对于前面内容的一些复习。

1.复习

1.1字符指针

这里我们有创建字符指针,以及利用const修饰字符指针,以及不常用的访问方式,代码如下:

#include<stdio.h>
int main()
{
	char a = 'w';
	char* p = &a;
	printf("a = %d\n*p = %d\n", a, *p);
	const char* q = "abcde";//由于字符串不可应该,用const
	//方便不正当修改字符串时找到错误
	char arr[] = "abcdef";
	printf("%c", "abcdef"[2]);
	
	return 0;
}

1.2指针数组

        指针数组也就是存放指针的数组,比如我们想要建立n个链表,链表的类型时struct student类型我们就可以建立为struct student*arr[N]数组的内容就是链表头指针的地址。

1.3数组指针

        数组指针也就是存放数组的指针,顾名思义他是一个指针*p,我们想要存放整形的数组,也就是返回类型为int,我们可以写为int*p,由于时数组指针,我们需要数组的元素的个数,也就是int(*p)[数组元素的个数]这里加括号的原因是优先级。

1.4函数指针

        函数指针,就是指向函数的指针,函数也存在地址&函数名和函数名都是函数的地址,例如我们需要指向一个Add函数他的参数为int,int,我们就可以写成int (*p)(int,int),在这里int是函数的返回类型,(int,int)是参数的类型。

2.函数指针数组

        在前面我们学了函数指针,87函数指针是指针,那么就有函数指针数组,比如我们函数指针的类型为int (*)(int,int), 那么我们函数指针数组的类型也为int (*)(int,int), 故我们可以写为int (*parr[10])(int,int).对于函数指针数组有什么作用,我们可以看一个例子,我们正常写一个计算器,代码如下:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
void menu()
{
	printf("*********************\n");
	printf("***1.加法   2.减法***\n");
	printf("***3.乘法   4.除法***\n");
	printf("*********************\n");
}
int Add(int x, int y)
{
	return x + y;
}
int reduce(int x, int y)
{
	return x - y;
}
int ride(int x, int y)
{
	return x * y;
}
int div(int x, int y)
{
	return x / y;
}
int main()
{
	menu();
	printf("请输入你想选择运算:");
	int num,x,y;
	scanf("%d", &num);
	printf("请输入两个操作数:");
	scanf("%d%d", &x, &y);
	switch (num)
	{
	case 1:
		Add(x, y);break;
	case 2:
		reduce(x, y); break;
	case 3:
		ride(x, y); break;
	case 4:
		div(x, y); break;
	}

	return 0;
}

        我们可以看到如果使用switch的时候比较繁琐,且内容相同,而且各个函数的返回类型和形参类型都相同,故我们可以利用函数指针数组进行操作,代码如下

#include<stdio.h>
void menu()
{
	printf("*********************\n");
	printf("***1.加法   2.减法***\n");
	printf("***3.乘法   4.除法***\n");
	printf("*********************\n");
}
int Add(int x, int y)
{
	return x + y;
}
int reduce(int x, int y)
{
	return x - y;
}
int ride(int x, int y)
{
	return x * y;
}
int div(int x, int y)
{
	return x / y;
}
int main()
{
	menu();
	printf("请输入你想选择运算:");
	int num,x,y;
	scanf("%d", &num);
	printf("请输入两个操作数:");
	scanf("%d%d", &x, &y);
	int(*p[4])(int, int) = { &Add,&reduce,&ride,&div };
	if (num >= 1 && num <= 4)
	{
		int ret = p[num - 1](x,y);
		printf("%d", ret);
	}
	return 0;
}

        我们看到主函数这里简洁了很多,故当函数的返回类型和形参类型相同的时候我们就就可以利用函数指针数组进行操作。

3.指向函数指针数组的指针

        既然函数指针数组是数组,那么就会存在函数指针数组的指针函数指针数组的指针,由于函数指针数组的指针这指针几乎不会用到,我们这里只是介绍,函数指针数组的类型我们可以看函数指针的类型,比如返回类型为int,参数为int,int,函数指针的类型为int(*)(int,int),那么函数指针数组的类型为int(*)(int,int),故指向函数指针数组的指针类型为int(*)(int,int),故我们可以写为int(*(*p)[10])(int,int)。

4.回调函数       

 回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。也就是说我们再次定义一个函数,它的参数为函数、指针,再里面进行操作。同样我们也是写计算器,代码如下:

#include<stdio.h>
void menu()
{
	printf("*********************\n");
	printf("***1.加法   2.减法***\n");
	printf("***3.乘法   4.除法***\n");
	printf("*********************\n");
}
int Add(int x, int y)
{
	return x + y;
}
int reduce(int x, int y)
{
	return x - y;
}
int ride(int x, int y)
{
	return x * y;
}
int div(int x, int y)
{
	return x / y;
}
int cacl(int(*p)(int,int))
{
	int x, y;
	printf("请输入两个操作数:");
	scanf("%d%d", &x, &y);
	int ret = p(x, y);
}
int main()
{
	menu();
	printf("请输入你想选择运算:");
	int num;
	scanf("%d", &num);

	switch (num)
	{
	case 1:
		cacl(&Add); break;
	case 2:
		cacl(&reduce); break;
	case 3:
		cacl(&ride); break;
	case 4:
		cacl(&div); break;
	}

	return 0;
}

今天的内容就结束了,希望大家可以一键三连;

 

到了这里,关于C/C++指针进阶全(保姆级教学)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C语言自定义类型详解(保姆级教学)

    目录 1.结构体 1.1结构体的介绍 1.2结构体的声明 1.3特殊声明(匿名结构体类型) 1.4结构体自引用 1.5结构体变量的定义和初始化 1.6结构体内存对齐 1.7修改默认对其数 2.位段 2.1什么是位段 2.2位段的内存分配 3.枚举 3.1枚举的定义 3.2枚举的优点 4.联合体(共用体) 4.1联合体类型

    2024年02月16日
    浏览(37)
  • 【C语言】简单贪吃蛇实现保姆级教学!!!

    关注小庄 顿顿解馋૮(˶ᵔ ᵕ ᵔ˶)ა 新年快乐呀小伙伴 引言: 小伙伴们应该都有一个做游戏的梦吧?今天让小庄来用C语言简单实现一下我们的童年邪典贪吃蛇,顺便巩固我们的C语言知识,请安心食用~ 如下是我们将实现的效果 请看vcr 平时我们运行程序弹出的黑框框就是控

    2024年02月19日
    浏览(29)
  • 【进阶C语言】进阶指针--学会所有指针类型

     本节内容大致目录: 1.字符指针 2.指针数组(数组) 3.数组指针 (指针)--比较重要 4.函数指针--比较重要 5.函数指针数组--用的较少 6.指向函数指针数组的指针--只需要了解就可以 需要掌握每一种类型的符号和用处。 前言:字符指针是一种指针,是众多指针类型中的一种。

    2024年02月07日
    浏览(42)
  • 【C语言进阶】 指针进阶(二)

    🔥 博客主页: 小王又困了 📚 系列专栏: C语言 🌟 人之为学,不日近则日退  ❤️ 感谢大家点赞👍收藏⭐评论 ✍️ 目录 一.函数指针  1.1函数指针的认识 1.2函数指针的使用 二、函数指针数组 1.1函数指针的认识 1.2 函数指针数组实现计算器  三、指向函数指针数组的指针

    2024年02月15日
    浏览(42)
  • 『C语言进阶』指针进阶(二)

    🔥 博客主页 : 小羊失眠啦 🔖 系列专栏 : C语言 🌥️ 每日语录 : 无论你怎么选,都难免会有遗憾。 ❤️ 感谢大家点赞👍收藏⭐评论✍️ 在上篇指针进阶中,我们对字符指针、指针数组、数组指针以及数组传参和指针传参有了一定的了解,你以为指针进阶就只有这些内

    2024年02月07日
    浏览(39)
  • 『C语言进阶』指针进阶(一)

    🔥 博客主页 : 小羊失眠啦 🔖 系列专栏 : C语言 🌥️ 每日语录 : 无论你怎么选,都难免会有遗憾。 ❤️ 感谢大家点赞👍收藏⭐评论✍️ 在C语言初阶中,我们对指针有了一定的了解,指针是个变量,是用来存放地址的,指针的大小是固定的4/8个字节,指针是有类型的

    2024年02月09日
    浏览(36)
  • 【C语言】指针进阶:字符指针&&数组指针&&函数指针

    ✨作者:@平凡的人1 ✨专栏:《C语言从0到1》 ✨一句话:凡是过往,皆为序章 ✨说明: 过去无可挽回, 未来可以改变 🌹 感谢您的点赞与关注,同时欢迎各位有空来访我的 🍁平凡舍 回想之前,我们学了 指针 的一些基础👉 指针与结构体 我们知道了指针的概念: 指针就是

    2023年04月08日
    浏览(43)
  • 【C语言进阶】指针数组 —— 数组指针

    🎬 鸽芷咕 : 个人主页  🔥 个人专栏 : 《C语言进阶篇》 《C语言初阶篇》 ⛺️生活的理想,就是为了理想的生活!    🌈 hello! 各位宝子们大家好啊,前面我们已经把指针大部分内容给学完了,今天就给大家带来数组指针or指针数组!    ⛳️ 很多说这俩名字不是差不

    2024年02月14日
    浏览(38)
  • 进阶C语言-指针的进阶(一)

    通过前面的学习,我们了解了指针的概念: 指针变量就是一个变量,用来存放地址,地址唯一标识一块内存空间。 指针的大小是固定为 4/8 个字节( 32位平台/64位平台 )。 指针是有类型的,指针的类型决定了指针的±整数的步长,指针解引用操作的时候的权限。 指针的运算

    2024年02月07日
    浏览(40)
  • C语言进阶之指针的进阶

    指针的主题,我们在C语言初阶博客已经接触过了,我们知道了指针的概念: 指针就是个变量,用来存放地址,地址唯一标识一块内存空间。 指针的大小是固定的4/8个字节(32位平台/64位平台)。 指针是有类型,指针的类型决定了指针的±整数的步长,指针解引用操作的时候

    2024年02月16日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包