(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()输出一个结果。""…...
边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...
Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
【C++】纯虚函数类外可以写实现吗?
1. 答案 先说答案,可以。 2.代码测试 .h头文件 #include <iostream> #include <string>// 抽象基类 class AbstractBase { public:AbstractBase() default;virtual ~AbstractBase() default; // 默认析构函数public:virtual int PureVirtualFunct…...
保姆级【快数学会Android端“动画“】+ 实现补间动画和逐帧动画!!!
目录 补间动画 1.创建资源文件夹 2.设置文件夹类型 3.创建.xml文件 4.样式设计 5.动画设置 6.动画的实现 内容拓展 7.在原基础上继续添加.xml文件 8.xml代码编写 (1)rotate_anim (2)scale_anim (3)translate_anim 9.MainActivity.java代码汇总 10.效果展示 逐帧…...
第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10+pip3.10)
第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10pip3.10) 一:前言二:安装编译依赖二:安装Python3.10三:安装PIP3.10四:安装Paddlepaddle基础框架4.1…...
第八部分:阶段项目 6:构建 React 前端应用
现在,是时候将你学到的 React 基础知识付诸实践,构建一个简单的前端应用来模拟与后端 API 的交互了。在这个阶段,你可以先使用模拟数据,或者如果你的后端 API(阶段项目 5)已经搭建好,可以直接连…...
图解JavaScript原型:原型链及其分析 | JavaScript图解
忽略该图的细节(如内存地址值没有用二进制) 以下是对该图进一步的理解和总结 1. JS 对象概念的辨析 对象是什么:保存在堆中一块区域,同时在栈中有一块区域保存其在堆中的地址(也就是我们通常说的该变量指向谁&…...
数据结构第5章:树和二叉树完全指南(自整理详细图文笔记)
名人说:莫道桑榆晚,为霞尚满天。——刘禹锡(刘梦得,诗豪) 原创笔记:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 上一篇:《数据结构第4章 数组和广义表》…...
