C高级编程笔记

提升方向:

1. **深入理解指针**: 


   指针的高级用法,包括指针的指针、函数指针、指针与数组、指针与结构体的深入应用等。

指针数组:本质是数组

1.指针数组的每个元素都是一个一级指针,每个元素都有自己独立的内存地址

2.应用于字符串数组或者动态数组中

	const char* str[3] = { "abc", "123", "..." };for (int i = 0; i < sizeof(str)/sizeof(char *) i++){cout << str[i] << endl;}

数组指针:本质是指针

1.数组指针指向第一个数组,每个元素都是一个数组

2.简化多维数组的操作和访问

3.函数参数传递,使函数能够接收多个维度的参数,如果实参是一个二维数组的话,形参可以用数组指针去接收

void prit(int (*str)[3], int rows)
{for (int i = 0; i < rows; ++i) {for (int j = 0; j < 3; ++j) {cout << str[i][j] << " ";}cout << endl;}
}int main()
{int str[2][3] = { {1,2,34}, {2,3,5}};prit(str, 2);return 0;
}

指针函数:本质是函数,返回值类型是指针,修改返回值类型的

1.用于返回动态内存分配的返回内存指针

2.链表操作,用于返回新节点或者链表后的节点

3.字符串操作,返回字符串地址

#include <stdio.h>
#include <stdlib.h>
int* mymalloc()
{int* ptr = (int*)malloc(sizeof(int)*5);if (ptr == NULL){return NULL;}return ptr;
}
int main()
{int* nptr = mymalloc();for (int i = 0; i< 5; i++){nptr[i] = i;printf("%d ", nptr[i]);}free(nptr);nptr = NULL;return 0;
}

函数指针:本质是指针,

1.用于回调函数中,一个函数调用另外一个

2.动态函数选择,可以在运行中动态选择哪个函数运行,配合函数数组使用

3.函数指针可以替代繁琐的Switch-case的使用,简化代码结构

回调函数例程,使用函数指针调用,使用回调机制
#include <iostream>
// 函数声明
void greetEnglish();
void greetSpanish();
void greetChinese();
// 定义函数指针类型
typedef void (*GreetFunction)();
void executeGreet(GreetFunction func) {func();  // 调用函数指针指向的函数
}
int main() {// 定义函数指针并赋值GreetFunction greet = greetEnglish;// 使用函数指针调用函数greet();// 修改函数指针指向的函数greet = greetSpanish;greet();// 使用回调机制executeGreet(greetChinese);return 0;
}
void greetEnglish() {std::cout << "Hello!" << std::endl;
}
void greetSpanish() {std::cout << "Hola!" << std::endl;
}
void greetChinese() {std::cout << "你好!" << std::endl;
}
动态函数选择
替代Switch - case
当然对于那种case里面只是一句话的就没必要用了,因为你也要创建大量的函数体
#include <stdio.h>// 定义函数指针类型
typedef int (*operation_func)(int, int);// 各种运算函数
int add(int a, int b) {return a + b;
}
int subtract(int a, int b) {return a - b;
}
int multiply(int a, int b) {return a * b;
}
int divide(int a, int b) {return a / b;
}
int main() {int a = 10, b = 5;const char operator = '+';// 函数指针数组operation_func operations[256] = { NULL };// 初始化函数指针数组operations['+'] = add;operations['-'] = subtract;operations['*'] = multiply;operations['/'] = divide;// 选择并调用相应的函数if (operations[(int)operator] != NULL) {int result = operations[(int)operator](a, b);printf("Result: %d\n", result);}else {printf("Invalid operator\n");return 1;}return 0;
}

结构体函数指针:功能函数列表

?????

值传递:

指针传递:

//指针传递
void fun(int *a, int *b)
{int temp = 0;temp = *a;*a = *b;*b = temp;cout << "a=" << *a << endl << "b=" << *b << endl;
}//值传递
void fun(int a, int b)
{int temp = 0;temp = a;a = b;b = temp;cout << "a=" << a << endl << "b=" << b << endl;
}

2. **动态内存管理**:


   深入了解动态内存分配、管理和优化。掌握 `malloc`, `calloc`, `realloc` 和 `free` 函数的使用,以及如何避免内存泄漏和碎片化。

3. **结构体**:

typedef struct{

int a;

int b;

char c;

}BASE;

BASE b = {

.a=100,

.b=20,

.c='a'

};

4. **算法优化**:


   实现和优化各种算法,如排序算法、搜索算法、递归算法等。

5. **模块化和面向抽象编程**:


   学习如何设计模块化的代码,使用抽象数据类型(ADT)和封装来提高代码的重用性和可维护性。

6. **系统级编程**:


   包括与操作系统交互的编程,使用系统调用,进行进程管理、文件操作、信号处理等。

7. **多线程和并发编程**:


   在C语言中使用多线程库如 POSIX Threads (pthreads) 进行并发编程,理解线程的创建、同步和通信机制。

10. **优化技术**:


    学习使用编译器优化选项,理解编译器是如何处理你的代码的,以及手动优化代码的技巧。

11. **嵌入式和底层编程**:


    对硬件接口编程,包括嵌入式系统中的C语言编程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/857364.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

新零售解决方案:线上线下融合,驱动现代商业新浪潮-亿发

在数字化和智能化的商业环境中&#xff0c;新零售正在迅速改变传统的商业模式。作为新时代的零售解决方案&#xff0c;新零售通过线上线下深度结合&#xff0c;为企业提供了更灵活、高效的运营方式。本文将探讨新零售的四大特征&#xff0c;并详细描述其在中小企业中的应用&…

虚拟机没关机,电脑直接关机导致虚拟机无法使用

虚拟机没关机&#xff0c;电脑直接关机导致虚拟机无法使用 虚拟机未正常关机 无法打开虚拟机&#xff0c;移除 删除虚拟机目录下的该文件夹CentOSXX.vmx.lck&#xff08;或者重新命名&#xff09; 虚拟机正常打开

二,SpringFramework

二、SpringFramework实战指南 目录 一、技术体系结构 1.1 总体技术体系1.2 框架概念和理解 二、SpringFramework介绍 2.1 Spring 和 SpringFramework概念2.2 SpringFramework主要功能模块2.3 SpringFramework 主要优势 三、Spring IoC容器和核心概念 3.1 组件和组件管理概念3…

一句话、10秒,我用Claude 3.5 Sonnet生成了完整的俄罗斯方块!

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;所以创建了“AI信息Gap”这个公众号&#xff0c;专注于分享AI全维度知识…

Python应用开发——30天学习Streamlit Python包进行APP的构建(7)

st.data_editor 显示数据编辑器 widget。 数据编辑器 widget 可让你在类似表格的用户界面中编辑数据框和许多其他数据结构。 警告 When going from st.experimental_data_editor to st.data_editor in 1.23.0, the data editors representation in st.session_state was ch…

java第二十七课 —— 多态的应用(二)| equals 方法

多态的应用 多态参数 方法定义的形参类型为父类类型&#xff0c;实参类型允许为子类类型。 应用实例1&#xff1a;前面的主人喂动物例子 应用实例2&#xff1a;定义员工类 Employee&#xff0c;包含姓名和月工资 [private] &#xff0c;以及计算年工资 getAnnual 的方法。普…

2352.相等行列对

给你一个下标从 0 开始、大小为 n x n 的整数矩阵 grid &#xff0c;返回满足 Ri 行和 Cj 列相等的行列对 (Ri, Cj) 的数目。 如果行和列以相同的顺序包含相同的元素&#xff08;即相等的数组&#xff09;&#xff0c;则认为二者是相等的。 示例 1&#xff1a; 输入&#xff1a…

Wireshark的基本用法以及注意事项

Wireshark 是一个流行的网络协议分析工具&#xff0c;可以捕获和分析网络数据包。以下是一些常见的 Wireshark 的用法&#xff1a; 安装和启动&#xff1a;首先需要下载和安装 Wireshark。安装完成后&#xff0c;可以通过启动 Wireshark 应用程序来打开它。 选择网络接口&…

Java——包

一、包 1、简要介绍 在Java编程语言中&#xff0c;包&#xff08;Package&#xff09; 是一种用来组织和管理类&#xff08;Class&#xff09;和接口&#xff08;Interface&#xff09;的机制。包为开发者提供了一种逻辑分组的方式&#xff0c;使代码更加模块化、结构化和易于…

【前端技术】标签页通讯localStorage、BroadcastChannel、SharedWorker的技术详解

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…

Spring Boot框架的原理及应用详解(一)

本系列文章简介&#xff1a; 在当今的软件开发世界中&#xff0c;快速迭代、高效开发以及易于维护成为了开发者们不断追求的目标。Spring Boot作为Spring框架的一个子项目&#xff0c;自其诞生以来就凭借其“约定大于配置”的理念和自动配置的特性&#xff0c;迅速在Java开发社…

Redis大key有什么危害?如何排查和处理?

什么是 bigkey&#xff1f; 简单来说&#xff0c;如果一个 key 对应的 value 所占用的内存比较大&#xff0c;那这个 key 就可以看作是 bigkey。具体多大才算大呢&#xff1f;有一个不是特别精确的参考标准&#xff1a; String 类型的 value 超过 1MB 复合类型&#xff08;Li…

使用Python读取表格中的某一行数据

import pandas as pdfile_path C:\Users\EDY\PJ-IPAStudio\designer\project\导入项目PUvNit.xlsxdef get_header_as_array(file_path):try:# 使用 pandas 读取 Excel 文件df pd.read_excel(file_path, headerNone, nrows1) # 只读取第一行# 将 pandas Series 转换为列表hea…

request.getParameter()方法总结

request.getParameter()方法总结 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 在Java Web开发中&#xff0c;request.getParameter()方法是用于获取HTTP请求…

关于解耦的一点思考

解耦 解耦是指解除不同模块或系统之间的紧密关联或相互依赖关系。 在技术领域&#xff0c;通过解耦可以使各个部分相对独立地进行开发、维护和修改&#xff0c;而不会对其他部分产生过多的直接影响。 这样能提高系统的灵活性、可扩展性和可维护性。 常见解耦方式 包括&…

一个漂亮的网站收藏函数

<!DOCTYPE html> <html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>网站收藏</title><style>body …

云手机群控功能讲解

接触云手机之前&#xff0c;很多企业或者个人卖家都对群控有浓厚的兴趣&#xff0c;云手机群控具体是什么呢&#xff1f;云手机群控&#xff0c;顾名思义&#xff0c;是指能够同时对多台云手机进行集中控制和管理的功能。打破了传统单台手机操作的限制&#xff0c;实现了规模化…

高精度乘法的实现

这是C算法基础-基础算法专栏的第九篇文章&#xff0c;专栏详情请见此处。 引入 上次我们学习了高精度加法的实现&#xff0c;这次我们要学习高精度减法的实现。 高精度乘法与高精度加法的定义、前置过程都是大致相同的&#xff0c;如果想了解具体内容&#xff0c;可以移步至我的…

查看LabVIEW及各个模块和驱动的版本号

要方便地查看当前计算机上安装的LabVIEW版本以及各个模块和驱动的版本号&#xff0c;可以使用以下几种方法&#xff1a; 1. 使用NI MAX (Measurement & Automation Explorer) NI MAX 是一个强大的工具&#xff0c;可以帮助你管理National Instruments硬件、软件和驱动程序…

Docker(三)-Docker常用命令

1.run run命令执行流程:2.帮助启动类命令 2.1 启动docker systemctl start docker2.2 停止docker systemctl stop docker2.3 重启docker systemctl restart docker2.4查看docker状态 systemctl status docker2.5开机启动 systemctl enable docker2.6查看docker概要信息 …