(C语言)指针进阶
问:
1. ( ),[ ],->,++,--,. ,*的操作符优先级是怎么样的?
2. Solve the problems:只有一个常量字符串与一个字符指针,该怎么打印常量字符串所有内容?
3. 常量字符串在内存里面是怎么样的?且怎么样?如果相同常量字符串被应用很多次,但内存里面怎么样?
4. 指针数组是什么?
5. 数组指针是什么?经常应用在什么地方?
6. 二维数组的首元素是什么?也就是什么?二维数组的数组名是什么?也就是什么?因此就是什么?
7. Solve the problems:已知一个二维数组,想计算它的行数与列数,并用数组指针打印二维数组该怎么办呀?
8. 函数指针是什么?函数指针数组是什么?函数指针数组的限制是什么?
9. Solve the problems:想用转移表来写一个简易的整数加减乘除计算器,该怎么写?
10. Solve the problems:想调用0地址处的一个函数该怎么办呀?
11. Solve the problems:想声明一个函数,该函数的两个参数分别是整型和函数指针,返回一个函数指针,该怎么办呀?
12. 画一张图解释一下什么是回调函数?
13. Solve the problems:有一堆整数,我想排序一下怎么办?
14. Solve the problems:有一些结构体,我想按照不同成员分别排序一下怎么办?
15. 对于void,可以用哪两个词语形容它?
16. qsort函数参数里面的比较函数的参数是什么?返回值是怎么确定的?
17. Solve the problems:我想用冒泡排序内核来实现qsort函数,该怎么办?
18. 画出有关指针与内存等的思考框架图?
答:
1. ( ) > [ ] > -> > ++ > -- > . > *
2.
//解决方法:
int main()
{char* p = &"Elon Musk";int sz = strlen("Elon Musk");int i = 0;for (i = 0; i < sz; i++){printf("%c", *(p + i));}return 0;
}
3. 连续存储的,无法修改,只会存一份。
4. 存放一个个指针的数组。
5. 指向数组的指针,二维数组。
6. 第一行,一个一维数组,首元素的地址,一维数组的地址,数组指针。
7.
//解决方法
int main()
{int arr[][3] = { 1,4,5,2,3,4,5,1,2,7,9,7,5,0 };int row = sizeof(arr) / sizeof(arr[0]);int col = sizeof(arr[0]) / sizeof(arr[0][0]);int i = 0;int j = 0;for (i = 0; i < row; i++){for (j = 0; j < col; j++){printf("%d ", *(*(arr + i) + j));}printf("\n");}return 0;
}
8. 指向函数的指针,存放一个个函数指针的数组,每个函数指针指向的函数其“规格”要一模一样。
9.
//解决方法:
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 menu()
{printf("******* 1. add 2. sub 3. mul 4. div 0. exit *******\n");
}
int main()
{int x = 0;int y = 0;int ret = 0;int(*arr[5])(int, int) = { 0,add,sub,mul,div };int input = 0;do{menu();printf("请输入:");scanf("%d", &input);if (input == 0){printf("退出成功\n");break;}else if (input > 4){printf("输入错误,重新输入\n");}else{printf("请输入两个操作数:");scanf("%d %d", &x, &y);ret = (*(arr + input))(x, y);printf("结果为:%d\n", ret);}} while (input);return 0;
}
10.
(*(void(*)())(0))();
11.
void(*signal(int, void(*)(int)))(int);
12.

13.
//解决方法
int cmp_int(const void* e1, const void* e2)
{return (*(int*)e1) - (*(int*)e2);
}
int main()
{int arr[] = { 12,34,23,67,54,90,78,99,21,53,70 };int sz = sizeof(arr) / sizeof(arr[0]);qsort(arr, sz, sizeof(arr[0]), cmp_int);int i = 0;for (i = 0; i < sz; i++){printf("%d ", *(arr + i));}return 0;
}
14.
//解决方法
struct Stu
{char name[20];int age;float score;
};
int cmp_by_score(const void* e1, const void* e2)
{return ((struct Stu*)e1)->score - ((struct Stu*)e2)->score;
}
int cmp_by_name(const void* e1, const void* e2)
{return strcmp(((struct Stu*)e1)->name, ((struct Stu*)e2)->name);
}
int main()
{struct Stu arr[5] = { {"wang",23,95.2} ,{"ye",20,96.3} ,{"shen",29,91.2} ,{"hu",25,90.8} ,{"Elon",51,99.9} };int sz = sizeof(arr) / sizeof(arr[0]);qsort(arr, sz, sizeof(arr[0]), cmp_by_score);printf("按成绩排名:\n");int i = 0;for (i = 0; i < sz; i++){printf("%7s %3d %.3f\n", (*(arr + i)).name, (*(arr + i)).age, (*(arr + i)).score);}qsort(arr, sz, sizeof(arr[0]), cmp_by_name);printf("按姓名排名:\n");for (i = 0; i < sz; i++){printf("%7s %3d %.3f\n", (*(arr + i)).name, (*(arr + i)).age, (*(arr + i)).score);}return 0;
}
15. 瞎子,垃圾桶。
16. 相邻数组元素的起始地址,根据要比较的实际数据大小确定。
17.
//解决方法
void Swap(char* e1, char* e2, size_t width)
{int i = 0;for (i = 0; i < width; i++){char tmp = *(e1 + i);*(e1 + i) = *(e2 + i);*(e2 + i) = tmp;}
}
void my_qsort(void* base, size_t num, size_t width, int(*cmp)(const void*, const void*))
{int i = 0;int j = 0;for (i = 0; i < (num - 1); i++){for (j = 0; j < (num - i - 1); j++){if (cmp((char*)base + j * width, (char*)base + (j + 1) * width) > 0){Swap((char*)base + j * width, (char*)base + (j + 1) * width, width);}}}
}
struct Stu
{char name[20];int age;float score;
};
int cmp_by_score(const void* e1, const void* e2)
{return ((struct Stu*)e1)->score - ((struct Stu*)e2)->score;
}
int cmp_by_name(const void* e1, const void* e2)
{return strcmp(((struct Stu*)e1)->name, ((struct Stu*)e2)->name);
}
int main()
{struct Stu arr[5] = { {"wang",23,95.2} ,{"ye",20,96.3} ,{"shen",29,91.2} ,{"hu",25,90.8} ,{"Elon",51,99.9} };int sz = sizeof(arr) / sizeof(arr[0]);my_qsort(arr, sz, sizeof(arr[0]), cmp_by_score);printf("按成绩排名:\n");int i = 0;for (i = 0; i < sz; i++){printf("%7s %3d %.3f\n", (*(arr + i)).name, (*(arr + i)).age, (*(arr + i)).score);}my_qsort(arr, sz, sizeof(arr[0]), cmp_by_name);printf("按姓名排名:\n");for (i = 0; i < sz; i++){printf("%7s %3d %.3f\n", (*(arr + i)).name, (*(arr + i)).age, (*(arr + i)).score);}return 0;
}
18.

相关文章:

(C语言)指针进阶
问:1. ( ),[ ],->,,--,. ,*的操作符优先级是怎么样的?2. Solve the problems:只有一个常量字符串与一个字符指针,该怎么打印常量字符串所有内容…...

DS期末复习卷(三)
选择题 某数据结构的二元组形式表示为A(D,R),D{01,02,03,04,05,06,07,08,09},R{r},r{<01,02>,<01&a…...

Java链表模拟实现+LinkedList介绍
文章目录一、模拟实现单链表成员属性成员方法0,构造方法1,addFirst——头插2,addLast——尾插3,addIndex——在任意位置插入3.1,checkIndex——判断index合法性3.2,findPrevIndex——找到index-1位置的结点…...

MySQL——单表、多表查询
一、单表查询 素材: 表名:worker-- 表中字段均为中文,比如 部门号 工资 职工号 参加工作 等 CREATE TABLE worker ( 部门号 int(11) NOT NULL, 职工号 int(11) NOT NULL, 工作时间 date NOT NULL, 工资 float(8,2) NOT NULL, 政治面貌 varcha…...

关于表的操作 数据库(3)
目录 前期准备工作: 一、单表查询: 二、多表查询: 前期准备工作: 修改数据库的配置文件,,使其可以显示库名,其中//d代表当前使用的数据库名 注:vim /etc/my.cnf.d/mysql-server.c…...

C++:红黑树
红黑树的概念 红黑树是一棵二叉搜索树,但是红黑树通过增加一个存储位表示结点的颜色RED或BLACK。通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出2倍,因而是接近平衡的。 红黑树的性质 ⭐…...
每天一道算法题の中缀表达式
中缀表达式(、-、*、/) :中缀表达式是指操作符位于操作数之间的数学表达式。例如,在中缀表达式"2 3"中,操作符""位于操作数"2"和"3"之间。现给定一个中缀表达式,…...
Dar语法基础-泛型
泛型 如果查看基本数组类型 List 的 API 文档,您会发现该类型实际上是 List<E>。 <…> 表示法将 List 标记为泛型(或参数化)类型——具有正式类型参数的类型。 按照惯例,大多数类型变量的名称都是单字母的࿰…...
rt-thread------串口(一)配置
系列文章目录 rt-thread 之 fal移植 rt-thread 之 生成工程模板 文章目录系列文章目录前言一、串口的配置step1:通过串口名字找到串口句柄step2:配置串口参数step3:设置串口接收回调函数step4:打开串口设备前言 UART(…...

Android - 自动系统签名
一、系统签名 以下是两类应用开发场景: 普通应用开发:使用公司自定义 keystore 进行签名,如:微信、支付宝系统应用开发:使用 AOSP 系统签名或厂商自定义 keystore 进行签名,如:设置、录音 系…...

SSH 服务详解 (八)-- vscode 通过 SSH 远程连接 linux 服务器
vscode 通过 SSH 远程连接 linux 服务器 SSH服务详解(一)–Linux SSH 服务器与客户端的安装与启动 SSH服务详解(二)–使用私钥登录 SSH 服务器(免密登录) SSH 服务详解 (三)-- 使用 SSH 代理 SSH 服务详解 (四)-- 本地调用远程主机的命令 SSH 服务详解 (五)-- 远程文件拷贝…...
【PTA Advanced】1060 Are They Equal(C++)
目录 题目 Input Specification: Output Specification: Sample Input 1: Sample Output 1: Sample Input 2: Sample Output 2: 思路 C 知识点UP 代码 题目 If a machine can save only 3 significant digits, the float numbers 12300 and 12358.9 are considered …...

仿真与测试:通过Signal Builder模块生成输入信号
本文研究通过Signal Builder模块生成输入信号的方法。 文章目录1 生成输入信号2 仿真过程2.1 搭建被测模型2.2 搭建Signal Builder输入模块2.3 配置仿真log及仿真3 总结1 生成输入信号 在汽车的电控软件开发中,经常会在Simulink模型内部进行单元测试。单元测试的本…...

云计算培训靠谱吗?
怎么算靠谱的培训呢? 举个例子: 我想参加云计算培训找个工作,机构满足了我的要求,有工作了,但是不是做云计算相关的。 小强也参加了云计算培训,想学好云计算成为技术大牛,最后专业学得普普通…...

力扣SQL刷题10
目录标题618. 学生地理信息报告--完全不会的新题型1097. 游戏玩法分析 V - 重难点1127. 用户购买平台--难且不会618. 学生地理信息报告–完全不会的新题型 max()函数的功效:(‘jack’, null, null)中得出‘jack’,(nul…...

31 岁生日快乐,Linux!
Linux 迎来了 31 岁生日,所以和我一起庆祝 Linux 的 31 岁生日吧,喝上一杯好香槟和一个美味的蛋糕!虽然有些人不承认 8 月 25 日是 Linux 的生日,但我知道。1991 年 8 月 25 日,21 岁的芬兰学生 Linus Benedict Torval…...

分布式ID生成方案
文章目录前言一、分布式ID需要满足的条件二、分布式ID生成方式基于UUID数据库自增数据库集群数据库号段模式redis ID生成基于雪花算法(Snowflake)模式百度(uid-generator)美团(Leaf)滴滴(Tinyid…...

合宙Air103|fbd数据库| fskv - 替代fdb库|LuatOS-SOC接口|官方demo|学习(16):类redis的fbd数据库及fskv库
基础资料 基于Air103开发板:🚗 Air103 - LuatOS 文档 上手:开发上手 - LuatOS 文档 探讨重点 对官方社区库接口类redis的fbd数据库及fskv库的调用及示例进行复现及分析,了解两库的基本原理及操作方法。 软件及工具版本 Luat…...

【论文精读】Deep Residual Learning for Image Recognition
1 Degradation Problem💦 深度卷积神经网络在图像分类方面取得了一系列突破。深度网络自然地将低/中/高级特征和分类器以端到端的多层方式集成在一起,特征的“层次”可以通过堆叠层数(深度)来丰富。最近的研究揭示了网络深度是至关重要的,在具…...
Lesson2:基础语法、输出输入
一、基础语法 1、行结构 一个Python程序可分为许多逻辑行,一般来说:一个语句就是一行代码,不会跨越多行。 """比如下面的Python程序,一共有3个逻辑行,每一行都通过print()输出一个结果。""…...

微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...

Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

循环冗余码校验CRC码 算法步骤+详细实例计算
通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)࿰…...

大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...

Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

毫米波雷达基础理论(3D+4D)
3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文: 一文入门汽车毫米波雷达基本原理 :https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...
LCTF液晶可调谐滤波器在多光谱相机捕捉无人机目标检测中的作用
中达瑞和自2005年成立以来,一直在光谱成像领域深度钻研和发展,始终致力于研发高性能、高可靠性的光谱成像相机,为科研院校提供更优的产品和服务。在《低空背景下无人机目标的光谱特征研究及目标检测应用》这篇论文中提到中达瑞和 LCTF 作为多…...

ubuntu22.04有线网络无法连接,图标也没了
今天突然无法有线网络无法连接任何设备,并且图标都没了 错误案例 往上一顿搜索,试了很多博客都不行,比如 Ubuntu22.04右上角网络图标消失 最后解决的办法 下载网卡驱动,重新安装 操作步骤 查看自己网卡的型号 lspci | gre…...