C语言
1)一般学习笔记(学习内容来自B站)
2)为学习nginx源码和unix网络编程打好基础
wzj_110
天道酬勤
展开
-
指针(三十二)练习(六)
一 练习(1)练习1&arr:数组的地址,只不过和'数组首元素的地址(arr[0]、arr)'值相同,但是'意义不同' -->'起始地址'+++++++++++"解读"+++++++++++(1) &a是'数组指针',本来应该是 int (*pr)[5] = &a 接收,这里进行(int *)'强制类型转换'(2) '指针'强制类型转换的'意义':后续指针'加减[+、-]'跳过'对应个指针类型'的字节(3) (a + 1) --...原创 2021-08-12 20:59:37 · 132 阅读 · 0 评论 -
指针(三十一)练习(五)
一 练习(1)整数数组解读(2)字符数组① sizeof解读② strlen规则: strlen统计从'起始'地址开始,直到找到'\0'字符为止.解读1①②③④...原创 2021-08-10 15:17:59 · 85 阅读 · 0 评论 -
指针(三十)深入讲解(四)
一 函数(1)void*(2)qsort函数官网qsort解读++++++++++++"函数原型"++++++++++++void qsort( void *base, --> 1:待排序'数组首地址' size_t nmemb, --> 2:数组中待排序'元素数量' size_t size, --> 3:各'元素'的占用空间大小-->"字节" int (*compar)(const void *, const ..原创 2021-08-09 19:32:06 · 92 阅读 · 0 评论 -
指针(二十九)深入讲解(三)
说明:本小结更倾向于'理解'一 前期回顾二 数组参数思考:在写代码的时候如果要把"数组"或者"指针"传给函数,那'函数的参数'该如何'设计'呢?① 一维数组传参备注:指针数组的'首元素'是一级'指针';指针数组的'数组名'对应'该指针的地址',需要'二级'指针来接收② 二维数组传参③ 小结既可以写成'数组[大写可省略]',也可以写成'指针[合理的指针类型]'三 指针参数说明:针对'函数'的① ...原创 2021-08-04 19:55:47 · 147 阅读 · 0 评论 -
指针(二十八)深入讲解(二)
一 数组指针① 基本概念1)数组指针的'本质'还是'指针';只不过存放的是'数组'的地址注意:数组首元素的地址和数组的地址虽然'值'一样,但是含义'不一样'② 案例一③ 案例二多维数组 -->'Print1'和'Print2'对比使用理解上: 把多维数组'当作'一维数组来理解;每一个元素就是'一整行';数组的地址-->"一维数组"的地址④ 解读含义①②③④⑤⑥...原创 2021-08-04 17:12:14 · 116 阅读 · 0 评论 -
指针(二十七)深入讲解(一)
一 指针进阶的内容++++++++++"初级阶段指针的回顾"++++++++++1. 指针就是个'变量',用来'存放地址',地址'唯一标识'一块内存空间.2. 指针的大小是固定的'4/8个'字节(32位平台/64位平台).3. 指针是有类型,指针的类型决定了'指针的+-整数'的步长,指针'解引用操作'的时候的权限.4. 指针的运算历史一、历史二二 字符指针(1)标准字符指针(2)数组和指针关联(3)经典用法char* ps...原创 2021-08-03 19:55:16 · 133 阅读 · 0 评论 -
杂谈(二十六)之const关键字
一 assert1. assert宏的'原型'定义在"<assert.h>"中,所以如果要使用,需要引入该'头文件'2. 原型定义:void assert( int expression ) -->"断言" 其'作用'是如果它的条件'返回错误',则'终止'程序执行,并把'问题'抛出来 1) 表达式的结果'为真',则什么也不做 2) 表达式的结果为'假(0)',它先'向stderr打印'一条出错信息,然后通过调用 abort 来'终止'程序运行(1..原创 2021-07-16 16:27:16 · 120 阅读 · 0 评论 -
结构体(二十五)
一 结构体涉及的内容二 结构体声明① 基础知识引出原因:'复杂对象',没办法直接的'描述',引出'struct(结构体)'1. 结构是一些'值的集合',这些值称为'成员变量';结构的每个成员可以是'不同类型'的变量备注: 数组是'相同'类型值的'集合'② 结构的声明struct tag {member-list;}variable-list;// 结构体声明本身就是'一条'语句,需要";"分号结束// variable-list-...原创 2021-07-16 11:19:44 · 135 阅读 · 0 评论 -
函数(二十四)指针(二)
一 野指针(1)概念++++++++++++++++++'类比'++++++++++++++++++1. '野'狗、猫:没有主人,没有任管理;疯狗-->'失控'2. '没有人管理'或者'管理不了'概念: 野指针就是指'针指向的位置'是'不可知(Unknown)'的('随机'的、'不正确'的、没有'明确限制'的)(2)野指针成因① 指针未初始化规则: 局部变量'未初始化',默认是'随机值(random_value)';补充: '指针也是',随便开了...原创 2021-07-10 19:30:02 · 106 阅读 · 0 评论 -
函数(二十三)指针(一)
一 指针① 学习重点② 指针是什么?1. 类比'现实'世界 '门牌号'所对应的'房间大小' 1) -->'门牌号'是一个'唯一标识',只是一个'编号' 2) -->'房间大小'是该'门牌号'对应的'一块'地址空间大小 不同的'房间类型': 一室一厅、三室二厅等,'体积'不一样1)sizeof(指针类型)sizeof('指针变量'或'指针类型')1. '32位'-->所占内存空间...原创 2021-07-09 22:22:46 · 89 阅读 · 0 评论 -
函数(二十二)操作符深入学习(四)
一 表达式求值(1)隐式类型转换字符型或短整形'之间',只要参与'表达式计算'就会发生'整形'提升① 整型提升的意义② 如何进行整型提升?③ 案例1④ 案例2"=="两边的'操作数'都会提升为'int'进行'比较'⑤ 案例3(2)算术转换1) 如果'某个操作符'的'各个操作数'属于'不同'的类型2) 那么'除非'其中一个操作数的'转换'为另一个操作数的类型,否则操作就'无法'进行.+++++...原创 2021-07-08 21:41:49 · 118 阅读 · 0 评论 -
函数(二十一)操作符深入学习(三)
一 赋值操作符(1)普通赋值=① 初始化int a=5;② 修改int a=5;a=10;③ 连续赋值int a = 1;int b = 2;int c = 3;a = b = c + 1 //连续赋值// 等价方式b = b + 1;a = b;// 这样的写法更加'清晰爽朗'而且易于'调试',可读性好④ 判断int flag = 10;if (flag=2) { printf("%...原创 2021-07-08 19:55:07 · 134 阅读 · 0 评论 -
函数(二十)操作符深入学习(二)
一 位运算符按'二进制位'进行'位'操作,对应的'二进制'位重点: 相应操作数的'补码'进行'位'操作需求: 判断两个'整数'a、b'是否相等',则可通过'下列语句'实现: return ( (a ^ b) == 0)(1)案例1(2)案例2需求: 不'创建'临时变量('第三个变量'),实现两个数的'交换'① 使用第三方变量② 加减法缺点: 由于a和b都是整数,'4个字节','空间有限';'a+b'可能会'溢出'...原创 2021-07-07 22:16:33 · 100 阅读 · 0 评论 -
函数(十九)操作符深入学习(一)
一 操作符的分类备注: 核心是学习'重点'、'难点'、'易错点'二 算术操作符+ - * / %["求余"]三 移位操作符+++++++'箭头表示移动方向'+++++++1. << '左'移操作符2. >> '右'移操作符(1)原码、反码、补码回顾正数: 原码、反码、补码'三者合一'负数: -1 -->int原码: 10000000 00000000 00000000 0...原创 2021-07-07 17:45:13 · 137 阅读 · 0 评论 -
函数(十八)数组作为函数参数
一 数组名作为函数参数二 冒泡排序(1)原理(2)实现1) 先在main主函数中调用和传参-->'功能性'2) 再声明和定义函数-->'具体实现''冒泡排序'最多计算'次数': 1+2+...+(n-1)(3)优化1) int array[]={1,2,3,4,5,6,7,8,9,10}说明: 初始化时候'元素'已经是'最终有序'的结果了2) 如果按照上面的算法'老老实实'排序,结果虽然'不会出错',但效率太'低'...原创 2021-07-07 12:18:22 · 124 阅读 · 0 评论 -
函数(十七)二维数组
一 二维数组① 二维数组的创建//数组创建int arr[3][4];char arr[3][5];double arr[2][4];② 二维数组的初始化1)测试1特点: 逐行'铺满',不能铺满,用对应类型的'默认元素'进行'填充'2)测试23)测试3细节: '二维'数组'行'可以省略,但是'列(must)'不能省略形如: int arr[][3]4)建议建议1:初始化时候,将'每行元素'用'{}'包括起来...原创 2021-06-29 19:41:54 · 239 阅读 · 1 评论 -
函数(十六)一维数组
一 数组① 学习重点② 数组概念数组是一组'相同类型'元素的'集合'③ 一维数组声明创建type_t arr_name [const_n];1) type_t 是指数组的'元素类型'-->'可做文章'2) arr_name 是数组的'名字'3) const_n 是一个'常量'表达式,用来指定'数组的大小' -->'预编译的时候是一个常量值'细节1: '没有'初始化,不是按照'int-->0'、"char...原创 2021-06-29 16:49:01 · 297 阅读 · 0 评论 -
函数(十四)自定义函数
一 自定义函数① 为什么需要自定义函数?② 自定义函数组成③ 简单案例细节:入参类型和传参类型要一致,否则函数没有能力接收④ 函数参数⑤ 函数调用⑥ 函数调用⑦ 链式访问⑧ 函数的声明和定义⑨ 函数递归⑩...原创 2021-06-28 15:39:16 · 278 阅读 · 0 评论 -
函数(十三)库函数学习
一 库函数(1)函数定义备注: 这里子程序'就是'函数(2)函数类型① 库函数1)背景2)概念3)辨析4)查找1) linux下的'编译器[例如gcc]'如何'找到'include指定的'标准'库头文件?备注:库函数'来自'系统头文件Centos7中'标准'头文件'搜索路径': -->'<>' 1. /usr/include 2. /usr/local/include 3. /usr/lib...原创 2021-06-27 11:26:55 · 171 阅读 · 0 评论 -
循环(十一)练习题
一 练习1需求1: 计算 n的'阶乘' -->'n!'1) 首先产生'[1,n]'的数字2) 不考虑'溢出'二 练习2'需求2':计算 1!+2!+3!+......+n!三 练习31) 在一个'有序[order]数组中'查找具体的'某个数字n'2) 编写int 'binsearch'(int x, int v[], int n); -->'函数'3) 功能:在'v[0]<=v[1]<=v[2]<= ....&...原创 2021-06-25 20:12:51 · 111 阅读 · 0 评论 -
循环(十)for循环
一 for循环(1)早期while形式int main(){ // 1. 初始化 int i=1; // 2. 判断条件 while(i<11) { printf("%d\n",i); // 3. 调整 i++; }}(2)while的缺点(3)for语法(4)for实践1需求:使用for循环在屏幕上打印'1-10'的数字(4)break和continue.原创 2021-06-25 18:29:52 · 226 阅读 · 0 评论 -
循环(九)while循环
一 循环① 循环理解循环动作-->做一些'重复'的事情② 循环形式1. 'while'语句2. 'for'语句3. 'do while'语句③ while循环语法格式while(表达式) { 循环语句;}④ while语句的执行流程⑤ while死循环// 最简单的'死循环'// '{}'才能包含'多条'语句while(1) { printf("死循环\n");}⑥ 需求1屏幕上打印'[1~...原创 2021-06-25 16:42:50 · 304 阅读 · 0 评论 -
分支(八)switch语句
一 switch(1)需求背景如下写成 'if...else if ...else if' 的形式'太复杂',就得有'不一样[difference]'的语法形式(2)switch实现首先来了解'语法'swicth '专门'实现多分支1)switch ('整数'表达式) -->'类型必须是int' 2)case '整数''常量'表达式: -->'int' -->字面常量:10、2+3、#define 定义的常量+++++++..原创 2021-06-25 09:49:35 · 136 阅读 · 0 评论 -
分支(七)if
一1)分支和循环C语言是一门'结构化'的'面向过程'的程序设计语言生活中的结构:1)顺序-->['直男-->一根筋'];2)选择-->['心机婊'];3)循环-->['痴情-->转圈圈']2) C语言的选择--> 分支语句或者选择语句 -->if、switch3) C语言中由';'号隔开的就是'一条语句'; -->空语句-->场景4)案例 -->'语法结构' 单分支;双分支;多分支 细节:执行某一个语句就会停..原创 2021-06-18 18:07:15 · 82 阅读 · 0 评论 -
初识C语言(六)
一 结构体1) 什么叫作结构体只前的类型 char int double -->现在:如何表示一个人?人、书是一个'复杂'的对象人:名字、身高、年龄、身份证等信息如何描述复杂对象:C语言用结构体来描述?我们自己'创造'的一种类型2)结构体关键字// 创建一个结构体类型struct Book{ //一一描述相关属性 char name[20];//数据结构与算法 short price;//55};// 备注:后面的';'不可缺少,结束...原创 2021-06-18 15:58:18 · 79 阅读 · 0 评论 -
初识C语言(五)
一 指针说明: 该篇只讲解'指针'相关的基础知识,后续'深入'学习和讲解原创 2021-06-18 11:25:10 · 103 阅读 · 0 评论 -
初识C语言(四)
int a =0; //4个字节,32bit位int b =^a; //b是'有符号'整形;最好位表示'符号位';-1表示'负数'按[2]进制'位取反'00000000 00000000 00000000 0000000011111111 11111111 11111111 11111111 -->'以此补码的形式存储'++++++++++++分割线++++++++++++'正数'的原、反、补码都相同原码、反码、补码关于'负数'的转换原码 -->'反码' --..原创 2021-06-17 19:56:04 · 112 阅读 · 0 评论 -
初识C语言(三)
一 选择语句类比: '分支'判断原创 2021-06-17 12:20:09 · 115 阅读 · 0 评论 -
初识C语言(二)
局部变量不是都放在main函数之外{} -->单独块!+++++++++++++++++'常量'生活中'不变'的量:常量1) 字面常量-->直接写出来的-->直观写出来的值[字面上理解就是一个常量]2)const -->'常属性'-->readonly-->只读'属性'const int num =4;// num是const修饰的'常变量' -->num本质是变量;只是具备常属性;所以叫作常变量+++++++++++++'创建数组...原创 2021-06-16 21:18:55 · 317 阅读 · 0 评论 -
初识C语言(一)
++++++++++++++++初始C语言++++++++++++++++ 语言的发展过程什么是C语言C语言是一门计算机语言! -->什么是计算机语言?英语、汉语、日语:人和人计算机语言概念:人和计算机交流的语言-->C/C++、Java、Python计算机语言的发展:计算机只能识别二进制语言[只有0、1]电脑是硬件、通电、只有正电(1)|负电(0);计算机只能处理的是电信号,也就是0和1这样的东西加法:很长的二进制序列写代码;查手册、不便于学习然后:给二进.原创 2021-06-16 16:29:09 · 117 阅读 · 0 评论 -
初中数学的一些压轴题
题目1: 分析:已知的两个中点连起来起不到任何作用,并且跟已知条件AD=BC起不到任何关联,所以中点M和N注定是要分开使用的,看到中点找中点,在哪里找另一个中点,构造辅助中位线呢?我们可以试一下AD和BC的边,发现无法利用AD=BC的条件,这就告诉我们,在已有的线段上找中点是死胡同,赶快换个思路吧!我们来自己创造一条能取中点的边,比如ABCD的对角线AC,取AC的中点G,再连接GM和GN,原创 2017-10-09 16:41:29 · 1054 阅读 · 0 评论 -
C语言之指针初涉
指针1---概念指针就是一种数据类型,用来表示内存地址指针变量的声明:数据类型名 *指针变量名,从理解上:(数据类型名 *)就是指针类型形如:int *a;使用指针类型声明的变量就是指针变量,a就是指针变量指针变量作用:可以对内存空间进行灵活的操作访问内存的方式:直接访问、间接访问实例1 直接和间接访问#includevoid main(void){ in原创 2017-11-08 17:30:06 · 225 阅读 · 0 评论 -
C语言练习题(三)
练习1:#include/*题目1: 用标准C编程:找出整形数字a-b之间的素数,并打印出来。 分析:理解素数的概念:除了1和自己本身可以被整除,其余均不能被整除 思路: 1)输入待检测的数据区间[a,b]; 2) 用for循环对a-b之间的数字进行遍历,i是属于[a,b]的区间的; 3)判断:对当前的数据i进行判断,如原创 2017-11-01 18:34:42 · 307 阅读 · 0 评论 -
C语言之指针再涉(二)
1 const指针1.1 指向const的指针变量实例1#includevoid main(void){ int const *p; const int*p2; //*p=2;是错误的(1)}说明:const和数据类型名出现不分先后次序,*p始终相连特点:该类指针指向的内存空间的内容(深层次的东西)是不可变的注:(1)报错原因---想通过赋值表达式改变了p指向原创 2017-11-09 13:47:44 · 353 阅读 · 0 评论 -
C语言练习题(二)
练习1:#include/*#include 加了这一行:报错原因系统里根本就没有软件需要的运行库。具体错误为:debug library*//*键盘输入一行字符;统计字母、空格、数字、其他字符的个数注意:用get()只能得到7个字符元素,末尾会自动补上'\0';输入8个数字后,会出现Stack around the variable 'xxx' was corrupted原创 2017-10-27 14:50:07 · 295 阅读 · 0 评论 -
C语言练习题(一)
练习1:/*1、 给你任意三个整形数据,找出其中最大一个整形数。思路:1)分别有三个变量用于保存数据,再加一个变量保存最大值 2)先让a和b进行比较,最大值辅给Max; 3) 再让c与上面的Max进行比较,最大值赋给Max;工具:用if进行逻辑判断*/#include//引入头文件int main(void){ int a,b,c,Max;//变量必须先定义后原创 2017-10-18 21:28:28 · 629 阅读 · 0 评论