
C
记录C语言基础知识
喂你的猴子跑了
C/C++、Qt、网络编程
展开
-
48-函数设计原则
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:4.4.5一、函数设计原则1)函数从意义上应该是一个独立的功能模块2)函数名要在一定程度上反映函数的功能3)函数参数名要能够体现参数的意义4)尽量避免在函数中使用全局变量 void sc(char *s1,char *s2)...原创 2020-01-28 21:09:36 · 227 阅读 · 0 评论 -
47-递归函数分析
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:4.4.5一、递归的数学思想1) 递归是一种数学上分而自治的思想2) 递归需要有边界条件 -当边界条件不满足时,递归继续进行 -当边界条件满足时,递归停止 递归将大型复杂问题转化为原问题相同但规模较小的问题进行处理。...原创 2020-01-28 20:57:06 · 186 阅读 · 0 评论 -
46-函数与宏分析
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:4.4.5一、函数与宏 宏or函数?#define RESET(p,len) \ while(len > 0) \ ((char*)p)[--len] = 0void reset(vo...原创 2020-01-28 20:26:03 · 154 阅读 · 0 评论 -
44-函数参数的秘密(上)
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:4.4.5一、函数参数1) 函数参数在本质上与局部变量相同在栈上分配空间2) 函数参数的初始值是函数调用时的实参值3) 函数参数的求值顺序依赖于编译器的实现 下面的程序输出什么?为什么?int k = 1;printf("%d...原创 2020-01-28 09:22:06 · 151 阅读 · 0 评论 -
43-函数的意义
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:4.4.5一、C语言中的函数1) 函数的由来二、函数的意义1) 模块化程序设计2) C语言中的模块化三、面向过程的程序设计1)面向过程是一种以过程(解决问题的过程)为中心的编程思想2) 首先将复杂的问题分解为一个个容易解...原创 2020-01-27 23:28:36 · 647 阅读 · 0 评论 -
42-内存操作经典问题分析二
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:4.4.5一、常见内存错误1) 结构体成员指针未初始化2) 结构体成员指针未分配足够的内存3) 内存分配成功,但并未初始化4)内存操作越界实例分析常见内存错误42-1.c#include <stdio.h>#include ...原创 2020-01-27 22:57:29 · 402 阅读 · 0 评论 -
41-内存操作经典问题分析一
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:4.4.5一、野指针1) 指针变量中的值是非法的内存地址,进而形成野指针2)野指针不是NULL指针,是指向不可用内存地址的指针(比如函数返回值为数组)3)NULL指针并无危害,很好判断,也很好调试4) C语言中无法判断一个指针所保存的地址是否合法...原创 2020-01-27 22:46:11 · 205 阅读 · 0 评论 -
40-程序的内存布局
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:4.4.5一、程序文件的一般布局1) 不同代码可执行程序中的对应关系g_init_v映射到.data段——变量被初始化g_uninit_v映射到.bss段——变量没被初始化(记得看uboot代码时,bss段内存会被初始化为0) int...原创 2020-01-27 09:32:19 · 136 阅读 · 0 评论 -
39-程序中的三国天下
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:4.4.5一、程序中的栈(行为:后进先出)1) 栈是现代计算机程序里最为重要的概念之一2) 栈在程序中用于维护函数调用上下文3) 函数中的参数和局部变量存储在栈上esp:栈指针4) 栈保存了一个函数调用所需的维护信息 -参数 ...原创 2020-01-26 11:55:30 · 218 阅读 · 0 评论 -
38-动态内存分配
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:4.4.5一、动态内存分配的意义1) C语言中的一切操作都是基于内存的2)变量和数组都是内存的别名 - 内存分配由编译器在编译期间决定 - 定义数组的时候必须指定数组长度 - 数组长度是在编译...原创 2020-01-25 20:54:12 · 425 阅读 · 0 评论 -
37-指针阅读技巧分析
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:4.4.5一、笔试中的问题 下面的标识符代表什么含义?int (*p1)(int*,int (*f)(int*));int (*p2[5])(int*);int (*(*p3)[5])(int*);int*(*(*p4)(int*))(int*...原创 2020-01-25 19:38:16 · 102 阅读 · 0 评论 -
36-函数与指针分析
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:4.4.5一、函数类型1)C语言中的函数有自己特定的类型2)函数的类型由返回值,参数类型和参数个数共同决定intadd(inti,intj)的类型为int (int,int)3)C语言中通过typedef为函...原创 2020-01-25 17:46:54 · 111 阅读 · 0 评论 -
35-数组参数和指针参数分析
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:4.4.5一、思考为什么C语言中的数组参数会退化为指针?二、退化的意义1)C语言中只会以值拷贝的方式传递参数2)当向函数传递数组时:-将整个数组拷贝一份传入函数(X错,这样操作效率会大大降低)...原创 2020-01-25 15:41:16 · 181 阅读 · 0 评论 -
34-多维数组和多维指针
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:4.4.5一、指向指针的指针1)指针的本质是变量2)指针会占用一定的内存空间3)可以定义指针的指针来保存指针变量的地址值int main(){ int i = 0; int* p = NULL; //p指向int类型变量 ...原创 2020-01-25 13:54:41 · 123 阅读 · 0 评论 -
33-main函数与命令行参数
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:4.4.5一、main函数的概念1)C语言中main函数称之为主函数2)一个C程序是从main函数开始执行的 下面的main函数定义正确吗?A:正确B:正确C:正确D:正确编程实验main函数的原型究竟是什么33-...原创 2020-01-24 20:56:39 · 224 阅读 · 0 评论 -
32-数组指针和指针数组分析
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:4.4.5一、思考1) 下面这些声明合法吗?int array[5];int matrix[3][3];int* pa = array;int* pm = matrix;不合法问题:array代表数组首元素的地址,那么matrix代表什么?matri...原创 2020-01-24 20:36:14 · 867 阅读 · 0 评论 -
31-字符串典型问题分析
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:4.4.5一、典型问题一1)下面的程序输出什么为什么?char buf[10] = {0};char src[] = "hello %s"; //9个字符 snprintf(buf,sizeof(buf),src); //将src要打...原创 2020-01-24 20:07:28 · 244 阅读 · 0 评论 -
30-C语言中的字符串
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:4.4.5一、字符串的概念1)字符串是有序字符的集合2)字符串是程序中的基本元素之一3)C语言中没有字符串的概念- C语言中通过特殊的字符数组模拟字符串- C语言中的字符串是以‘\0’结尾的字符数组二...原创 2020-01-24 14:16:00 · 194 阅读 · 0 评论 -
29-指针和数组分析(下)
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:4.4.5一、问题:数组名可以当做指针常量使用,那么指针是否也可以当做数组名来使用呢?二、数组的访问方式1)以下标的形式访问数组中的元素 int main(){ int a[5] = {0}; a[1] ...原创 2020-01-24 14:04:25 · 136 阅读 · 0 评论 -
28-指针和数组分析(上)
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:4.4.5一、数组的本质1)数组是一段连续的内存空间2)数组的空间大小为sizeof(array_type)*array_size?3)数组名可看做指向数组第一个元素的指针常量,但不是指针(只能看做!方便理解)...原创 2020-01-23 22:31:17 · 145 阅读 · 0 评论 -
27-数组的本质分析
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:4.4.5一、数组的概念1)数组是相同类型的变量的有序集合 数组示意图:数组包含5个int类型的数据note:1)数组地址a第一个意思:数组名和数组元素首地址都是同一个位置。2)数组地址a第二个意思:数组长度。二、数组的大小...原创 2020-01-23 18:21:44 · 209 阅读 · 0 评论 -
26-指针的本质分析
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:4.4.5一、变量回顾程序中的变量只是一段存储空间的别名,那么是不是必须通过这个别名才能使用这段存储空间?二、思考:下面的程序输出什么?为什么?int i = 5;int* p = &i;printf("%d,%p\n"...原创 2020-01-22 22:47:49 · 378 阅读 · 0 评论 -
25-#和##操作符使用分析
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:4.4.5一、#运算符1)#运算符用于在预处理期将宏参数转换为字符串2)#的转换作用是在预处理期完成的,因此只在宏定义中有效3)编译器不知道#的转换作用(预编译期间行为)4)用法#define STRING(x) #xprintf("%s", STR...原创 2020-01-22 22:16:51 · 258 阅读 · 0 评论 -
24-#pragma使用分析
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:4.4.5一、#pragme简介1)#pragme用于指示编译器完成一些特定的动作2)#pragme所定义的很多指示字是编译器特有的3)#pragme在不同的编译器间是不可抑制的 - 预处理器将忽略它不认识的#pragma指令 - 不...原创 2020-01-22 22:16:14 · 329 阅读 · 0 评论 -
23-#error和#line使用分析
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:4.4.5一、#error的用法1)#error用于生产一个编译错误消息2)用法#errormessage message不需要用双引号包围 #error编译指示字用于自定义程序员特有的编译错误消息 类似的,#warning用于生...原创 2020-01-20 08:26:26 · 294 阅读 · 0 评论 -
22-条件编译使用分析
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:4.4.5一、基本概念1)条件编译的行为类似于C语言中的if...else...2)条件编译是预编译指示命令,用于控制是否编译某段代码#define C 1int main(){ #if(1 == C) printf("This is firs...原创 2020-01-18 16:44:59 · 162 阅读 · 0 评论 -
21-宏定义与使用分析
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:4.4.5一、C语言中的宏定义1)#define是预处理器处理的单元实体之一2)#define定义的宏可以出现在程序的任意位置3)#define定义之后的代码都可以使用这个宏二、定义宏常量1)#define定义的宏常量可以直接使用2)#defi...原创 2020-01-14 22:35:19 · 179 阅读 · 0 评论 -
20-链接过程简介
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:4.4.5一、问题... 工程中的每个C语言源文件被编译后生产目标文件,这些目标文件如何生存最终的可执行程序?二、链接器的意义 链接器的主要作用是把各个模块之间相互引用的部分处理好,使得各个模块之间能够正确的衔接。注:这...原创 2020-01-11 10:46:51 · 131 阅读 · 0 评论 -
19-编译过程简介
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:4.4.5一、被隐藏了的事实1)初识编译器2)你不知道的事二、编译器做了什么1)预编译 - 处理所有的注释,以空格代替 - 将所有的#define删除,并且展开所有的宏定义 - 处理条件编译指令#if,#ifdef,#elif...原创 2020-01-11 09:58:37 · 200 阅读 · 0 评论 -
18-三目运算符和逗号表达式
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:4.4.5一、三目运算符1)三目运算符(a?b:c)可以作为逻辑运算符的载体2)规则:当a的值为真时,返回b的值;否则返回c的值下面的程序运行结束后, a,b,c的值分别为多少?int a = 1;int b = 2;int c = 0;c ...原创 2020-01-07 21:37:14 · 342 阅读 · 0 评论 -
17-++和--操作符分析
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:4.4.5一、++,--操作符的本质1)++和--操作符对应两条汇编指令- 前置(先递增,再使用数值) *变量自增(减)1 *取变量值- 后置(先使用数值,再递增) *取变量值 *变量自增(减)1二、++,--...原创 2020-01-07 21:06:06 · 172 阅读 · 0 评论 -
16-位运算符分析
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:4.4.5一、位运算符分析1)C语言中的位运算符 位运算符直接对bit位进行操作,其效率最高。2)左移和右移注意点 - 左操作数必须为整数类型 *char和short被隐式转换为int后进行移位操作 - 右操作数的范围...原创 2020-01-06 21:52:26 · 419 阅读 · 0 评论 -
15-逻辑运算符分析
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:4.4.5一、印象中的逻辑运算符1)对话……- 学生: *老师,在我的印象中,逻辑运算符用在条件判断的时候,真挺简单的,有必要在进阶课程中讲解吗?- 老师: *逻辑运算符确实在条件判断的时候用得比较多,但是这并不能说明简单……...原创 2020-01-05 21:37:57 · 197 阅读 · 0 评论 -
14-单引号和双引号
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:4.4.5一、单引号和双引号1)C语言中的单引号用来表示字符字面量2)C语言中的双引号用来表示字符串字面量 ‘a'表示字符字面量 在内存中占1个字节 ’a'+1表示'a'的ASCII码加1,结果为'b'...原创 2020-01-04 22:31:58 · 1288 阅读 · 0 评论 -
13-接续符和转义符
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:4.4.5一、接续符的意义1) C语言中的接续符(\)是指示编译器行为的利器 实例分析初探接续符13-1.c#in\clud\e <st\dio.h>in\t m\ain(\){pri\ntf\ (\ "...原创 2020-01-04 14:24:42 · 249 阅读 · 0 评论 -
12-注释符号
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:4.4.5一、注释的第一印象对话- 学生: 老师,我觉得注释没有必要深究,因为很简单,对程序功能也没有影响。- 老师: 注释是C语言最重要的工具,我们先看自己有没有能力驾驭它,在讨论有没有必要深究。二、似是而非的问题下面的注释...原创 2019-12-31 06:42:41 · 239 阅读 · 0 评论 -
11-enum,sizeof,typedef分析
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:4.4.5一、枚举类型的使用方法1)enum是C语言中的一种自定义类型2)enum值是可以根据需要自定义的整型值3)第一个定义的enum值默认为04)默认情况下的enum值是在前一个定义值的基础上加15)enum类型的变量只能取定义时的离散值enu...原创 2019-12-30 21:38:10 · 173 阅读 · 0 评论 -
10-struct和union分析
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:4.4.5一、struct的小秘密1) C语言中的struct可以看作变量的集合2) struct的问题 - 空结构体占用多大内存?实例分析空结构体的大小10-1.c#include <stdio.h>struc...原创 2019-12-29 20:56:28 · 151 阅读 · 0 评论 -
09-const和volatile分析
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:4.4.5一、const只读变量1) const修饰的变量是只读的,本质还是变量2) const修饰的全局变量在栈上分配空间3) const修饰的全局变量在全局数据区分配空间4) const只在编译期有用,在运行期无用(运行期间通过指针可以修改数据)co...原创 2019-12-08 22:00:28 · 157 阅读 · 0 评论 -
08-goto和void分析
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:4.4.5一、遭人遗弃的goto1)高手潜规则:禁用goto2)项目经验:程序质量与goto的出现次数成反比3)最后的判决:将goto打入冷宫实例分析goto副作用分析8-1.c#include <stdio.h>#includ...原创 2019-11-30 23:00:21 · 105 阅读 · 0 评论