随笔分类 - C
我将嵌入式中基础部分的C语言单独整理出来。因为C是博大精深的啊~~作为一个独立分支来维护。
摘要:在描述一个物体的属性的时候,单一的变量类型是无法完全描述完全的。所以有了灵活的结构体变量。 结构体变量从意义上来讲是不同数据类型的组合,从内存上来讲是在一个空间内进行不同的大小划分。 1.1 结构体类型变量的定义 1.2 结构体变量的声明 定义了结构体变量后,并没有在内存中开辟相应的空间,只有声明了
阅读全文
摘要:memcpy不可以把目的地址写成本身 但是memmove可以,因为它是先保存到临时空间 #include <string.h> void *memcpy(void *dest, const void *src, size_t n); 将内存src拷贝n个字符到内存dest void *memmove
阅读全文
摘要:#include <string.h> char *strchr(const char *s, int c); The strchr() function returns a pointer to the first occurrence of the character c in the stri
阅读全文
摘要:#include <string.h> int strcmp(const char *s1, const char *s2); 比较字符串s1和s2 int strncmp(const char *s1, const char *s2, size_t n); 比较字符串s1和s2前n个字符 int
阅读全文
摘要:字符串处理函数 1. 拷贝 strcpy 2. 追加 strcat #include <string.h> char *strcpy(char *dest, const char *src); 将字符串src 复制到字符数组 dest char *strncpy(char *dest, const
阅读全文
摘要:#include <stdlib.h> double atof(const char *nptr); 将字符串转换成双精度浮点数 int atoi(const char *nptr); 将字符串转换成整形数 long atol(const char *nptr); 将字符串转换成长整型数 doubl
阅读全文
摘要:使用库函数是源码的一种保护??? <我猜的.> 库函数其实不是新鲜的东西,我们一直都在用,比如C库. 我们执行pringf() 这个函数的时候,就是调用C库的函数. 下面记录静态库和动态库的生成和使用. 静态库:libxxx.a 动态库:libxxx.so 静态库: 在程序编译的时候,将库编译进可执
阅读全文
摘要:1. 函数设计的时候,如果使用到全局变量,就尽量通过参数的形式传递进来 也就是说,保持 函数 跟 外部的交互 只有 参数 和 返回值 2. 在有参数的情况下,或者有数值输入的时候,要先进行错误判断.
阅读全文
摘要:在内存空间中, 1. 单位大小的数据 叫 数值 . 比如 int a; char b; ... 2. 由这些单位数据组合起来的内存, 称作 空间. 比如: 各种数组char/int a[10]; 结构体... 空间以数组为例.又分为: 2.1 字符空间 2.2 非字符空间 对于 数值 做参数有两种方
阅读全文
摘要:形参实现一种数据传入的接口 ,由 实参 拷贝给 形参. 拷贝!!!!!!!!!!! 例1: void func(int tmp){ //意图是实现传进来的参数 +1 tmp++; } int mian(){ int a = 10; func(a); printf("%d\n",a); //输出结果还
阅读全文
摘要:函数的组成: 函数名 输入参数 返回值 用指针保存函数: int func(int a, int b, char c){ } --> int (*func)(int,int,char) //返回值 (地址)(参数) 有一个地址:0xA0,如何表达成地址? 强转 char *p; p = (char
阅读全文
摘要:多级指针 以二级指针为例 二级指针的由来是 指针数组 的指针形式. int *p[10] 读取的顺序是 p[10] --> 10个空间的数组 * p[10] --> 这10个空间的数组里面存放的数据都是 指针型的数据 int *p[10] --> 数组里面每个指针指向的空间存放的是int型的数据 i
阅读全文
摘要:二维数组声明: int a[2][3] ={{1,2,3},{4,5,6}; //两行 三列 1 2 3 4 5 6 二维数组在声明的时候可以不写行,但一定要写列 int buf[][5] = {{1,2},{3,4,5},{6}}; 1 2 0 0 0 3 4 5 0 0 6 0 0 0 0 //
阅读全文
摘要:一维数组和字符串 首先是字符数组(区别字符串) char buf[10] = {'a','b','c'}; //这只是单纯的字符数组,不是字符串 字符串最重要的标志就是结尾有一个'\0',所以如果表示字符串数组的话,要在结尾多一个'\0' 但是,真的字符串数组有另一个更标准的表达形式 char bu
阅读全文
摘要:数组指针 和 指针数组 这两个名词可以说是经常搞混了 数组指针--> 数组的指针 就是前面讲的 指向数组a的指针p; 指针数组-->存满指针的数组 就是一个数组里面存的都是指针. > 也是所谓的二级指针 数组指针就不讲了,见一维数组和指针. 那么指针数组呢? 首先,指针数组是 一个数组里面都是指针
阅读全文
摘要:0. 数组的两种表现形式 一种是常见的a[10]; //初学者常用 另一种是用指针表示的数组. //实际工程使用.常用于参数传递 因为数组也是指针啊. 1. 一维数组的定义 数组是一批相同数据的集合 . 如果说 int a; 是在内存中开辟了一个int大小的空间, 那么 int a[10] 就是表示
阅读全文
摘要:多级指针 多级指针常常使用于数组.这里仅仅介绍一下它长什么样,后文会再次详细对比使用. 多级指针呢,常见的有二级指针.见图. 多级指针 多级指针常常使用于数组.这里仅仅介绍一下它长什么样,后文会再次详细对比使用. 多级指针呢,常见的有二级指针.见图. 二级指针的写法: char **p; 这样来看:
阅读全文
摘要:指针 1. 什么是指针? 2. 指针可不可怕? 3. 指针好不好玩? 4. 怎么学好指针? C语言是跟内存打交道的语言,指针就是内存地址。指针无处不在,指针并不可怕,相反,等你学到一定程度后,会有一种,看见指针就会有亲切的感觉。 指针是很好玩的东西。大多数人觉得指针难学,都是因为觉得它太抽象,不知道
阅读全文
摘要:记录一下递归函数 递归函数 分为两部分: 1.递归点 --重复执行的部分 2.出口 --函数的出口. 设计:递归函数用if-else来完成 如果输入的参数 n > 0,就执行第一个判断体. return n* func( n - 1); 假设n = 3, 第一次 执行 return 3* func(
阅读全文
摘要:导航: 1.指针 2. 数组 3. 结构体,共用体 4. 内存分布图 5. 段错误分析 >x< >x< >x< >x< >x< >x< >x< >x< >x< >x< 一切皆内存 . 1. 指针 1.1 认识指针和指针变量 假设,有一个大柜子,这个大的柜子,有很多很多的小格子,每一个格子,都有一个唯
阅读全文