(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()输出一个结果。""…...
Day131 | 灵神 | 回溯算法 | 子集型 子集
Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...
安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...
为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?
在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...
今日科技热点速览
🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...
第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...
蓝桥杯3498 01串的熵
问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...
淘宝扭蛋机小程序系统开发:打造互动性强的购物平台
淘宝扭蛋机小程序系统的开发,旨在打造一个互动性强的购物平台,让用户在购物的同时,能够享受到更多的乐趣和惊喜。 淘宝扭蛋机小程序系统拥有丰富的互动功能。用户可以通过虚拟摇杆操作扭蛋机,实现旋转、抽拉等动作,增…...
django blank 与 null的区别
1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是,要注意以下几点: Django的表单验证与null无关:null参数控制的是数据库层面字段是否可以为NULL,而blank参数控制的是Django表单验证时字…...
SQL进阶之旅 Day 22:批处理与游标优化
【SQL进阶之旅 Day 22】批处理与游标优化 文章简述(300字左右) 在数据库开发中,面对大量数据的处理任务时,单条SQL语句往往无法满足性能需求。本篇文章聚焦“批处理与游标优化”,深入探讨如何通过批量操作和游标技术提…...
