C语言课程
文章平均质量分 52
louyijie
这个作者很懒,什么都没留下…
展开
-
苏嵌23 16.11.28
printf注意事项:行缓冲①满一行才输出 ②遇到\n或\r才输出scanf和printf用的是同一个缓冲区★不作要求时printf加\nchar *result = "hello world"是常量不能赋值“%d\n”,__LINE__ 当前代码所在行号“%s:%d\n”,__func__ 打印这个代码所在函数名"a[%d] =原创 2016-11-29 19:38:45 · 248 阅读 · 0 评论 -
scanf时清除缓冲区的方法
前面输入其他类型 后面输入字符时剔除\n的方法:①ch字符输入前加getchar();②用格式符%*c%c %*c:读入一个字符但忽略它(不给任何变量赋值)③前面加空格 空格%c④在输入前加fflush(stdin);原创 2016-11-27 14:38:02 · 641 阅读 · 0 评论 -
苏嵌28 16.12.07
数组和指针的区别:①从空间分配上 数组静态分配,指针动态分配,可提高空间利用率②从访问效率上 指针可以间接访问硬件,数组直接访问,访问效率高③从安全性上指针导致野指针,内存越界,但可通过指针随机跳转④从函数形参上 数组会退化为指针函数执行过程:1、通过函数名找到函数入口2、给形参分配空间3、传值4、执行函数体语句5、返回、释放空间当只使用原创 2016-12-09 12:22:05 · 299 阅读 · 0 评论 -
苏嵌29 16.12.09
传出参数:一个变量从函数中带出来值传入参数:一个变量有值,放到函数中去用main函数中加return 0 结束当前函数方便操作系统运行,提高运行效率,正常运行退出exit(1) 遇到直接退出程序原创 2016-12-10 10:39:51 · 215 阅读 · 0 评论 -
苏嵌30 16.12.16
能直接访问硬件的语言:c、汇编、c++不同款编译器:看不同的标准同一款编译器:看编译器支持的标准IDE:集成开发环境SVN/git版本管理器(git集成了内核)SVN在ubuntu下用c89/c99运用c11微软编译器下用运算符和表达式:i++使用结束之后再自加i=2情况下num = (i++) +(i++) +(原创 2016-12-19 00:54:06 · 294 阅读 · 0 评论 -
苏嵌31 16.12.18
c语言优化:①提高算法 ②使用位操作c语音的性能优化switch() 括号中的内容只能是字符或整型#define MAX(a,b) a > b ? a : b // ++a > b ? ++a : bint a = 6;int b = 5;MAX(++a,b);输出为8 define傻瓜式替换const enum宏函数和自定义原创 2016-12-19 01:33:10 · 296 阅读 · 0 评论 -
苏嵌22 16.11.26
局部变量--->栈 全局变量--->数据区int num = 5;①占用空间大小 ②作用域(生命周期)③变量的存储区域① ②③计算机 CPU内存 动态 掉电后丢失 存放 当前运行的数据硬盘 静态 掉电后不丢失 存放固有的数据内存↑ 运行效率↑ 换cpu贵原创 2016-11-27 14:23:05 · 818 阅读 · 0 评论 -
苏嵌32 17.01.17
fopen:★a+ 打开可读写 每次在文件末尾追加 文件不存在自动创建FILE *fp;fp = fopen(argv[1], "a+");返回值为文件指针 FILE在内部为结构体重命名if(fp == NULL){ perror("open file error!"); exit(1);}fwrite:fr原创 2017-01-17 20:25:35 · 202 阅读 · 0 评论 -
苏嵌33 17.01.18
文件----------存储数据(缺点)无格式的存取数据库文件:特殊的文件数据库:有结构的,集成的,可共享的统一管理的数据结构★关系型数据库模型RDBMS(二维表格)元组:一行属性:一列(字段)主键列:某一列唯一标识一行嵌入式数据库基本要求:体积适当 可移植性好 编程接口简单 代码开源每个SQL语句以;结束 不区分大小写原创 2017-01-18 22:07:38 · 242 阅读 · 0 评论 -
Mysql单文件存储删除数据Bug文件容量不会减少
MySQL的Bug之一:InnoDB ibdata1 never shrinks after data is removed问题描述当innodb引擎使用单个文件进行存储的时候,当对数据库中数据进行删除的时候,文件的大小并不会发生变化,意味着文件将会越来越大并且即使删除也没办法 让其释放磁盘的空间。转载请注明出处:http://blog.csdn.NET转载 2017-01-19 22:56:22 · 258 阅读 · 0 评论 -
十进制小数转化为二进制数
因为直接干说原理有点难懂,决定举个例子来说明比较形象例如22.8125整数和小数分别转换。整数部分:22除以2,商继续除以2,得到0为止,★将余数逆序排列★。22 / 2 11 余011/2 5 余 15 /2 2 余 12 /2 1 余 01 /2 0 余 1所以22的二进制是10110!小数部分:0.8原创 2016-11-26 14:35:55 · 3541 阅读 · 1 评论 -
苏嵌20 16.11.25
程序员规范:起文件名时 2:to 4:for函数返回值 char *result = int2str(num); 子函数 char * int2str(int num)返回局部变量地址 static char result[MAX_SIZE];static 整个程序结束后释放上课内容:32位情况下:bit字节=8bit原创 2016-11-26 14:20:27 · 216 阅读 · 0 评论 -
指针与数组的区别
C++/C程序中,指针和数组在不少地方可以相互替换着用,让人产生一种错觉,以为两者是等价的。 数组要么在静态存储区被创建(如全局数组),要么在栈上被创建。数组名对应着(而不是指向)一块内存,其地址与容量在生命期内保持不变,只有数组的内容可以改变。指针可以随时指向任意类型的内存块,它的特征是“可变”,所以我们常用指针来操作动态内存。指针远比数组灵活,但也更危险。下面以字符串为例比较转载 2016-12-06 16:23:39 · 230 阅读 · 0 评论 -
苏嵌24 16.11.30
远指针:多维指针野指针:随机指向一块内存的指针容易造成的错误:内存泄漏可能不出现段错误:有时候随机分配的内存地址可能是已经分配过的内存地址避免野指针:我认为有以下几点要做,首先,我们要养成良好的编码习惯1:、当指针没有指向时,置为空(并不能解决,只能起引起注意的作用)能引起我的注意,不能对这个指针进行操作。 在操作系统中0地址的空间不可以进行赋值原创 2016-12-01 12:26:15 · 214 阅读 · 0 评论 -
苏嵌18 16.11.19
1、嵌入式开发中为什么选择C语言?所有的操作系统内核都由C语言实现2、为什么用C语言开发操作系统内核?操作系统特点:①出色的移植性:1、一个软件从一个平台切换到另一个平台,修改的代码越少,移植性越好2、软件能在不同平台下运行C语言能适用于不同的硬件平台(单片机,ARM等) ②能够访问硬件:还有什么语言访问硬件? 汇编 访问效率高对硬件初始化用汇编,对硬件做复杂原创 2016-11-19 23:29:32 · 291 阅读 · 0 评论 -
苏嵌25 16.12.02
分配空间 char *ptr = (char *)malloc(sizeof(char) * 100);返回malloc返回值 默认返回void *默认类型转换强制类型转换①指针之间赋值一定要是相同类型(步长)指针之间赋值(除实型float)16进制每两位一个字节警告:从不兼容的指针类型赋值--->不同类型指针之间赋值★步长 长指针--原创 2016-12-03 00:29:10 · 229 阅读 · 0 评论 -
relloc calloc 如何使用 注意事项
2.realloc作用:重新分配内存块语法:void * realloc(void* p, size_t size);参数 p 以前分配的内存块的指针 size新的大小 (以字节为单位) 返回值 1.原内存块后内存充足则返回原指针 2转载 2016-12-03 13:48:59 · 782 阅读 · 0 评论 -
malloc实现原理和内存碎片
malloc()是C语言中动态存储管理 的一组标准库函数之一。其作用是在内存的动态存储区中分配一个长度为size的连续空间。其参数是一个无符号整形数,返回值 是一个指向所分配的连续存储域的起始地址的指针。 动态内存分配 就 是指在程序执行的过程中动态地分配或者回收存储空间的分配内存的方法。动态内存分配不像数组等静态内存分配方法那样需要预先分配存储空间,而是由系统根据 程序的需要即时分配,且转载 2016-12-03 13:46:44 · 402 阅读 · 0 评论 -
苏嵌26 16.12.03
整型:为了方便理解,定a一维数组 aa二维数组 aaa三维数组一维数组:一维数组名是指针常量,这个指针常量里保存的是数组中首元素的地址int a[3] = {0};[ ] = *( ) a[i]=*(a + i)printf("a = %p\n",a);//数组名:指针常量,保存数组首元素的地址printf("&a = %p\n",&a)原创 2016-12-04 14:48:18 · 239 阅读 · 0 评论 -
主函数形参agrc argv作用
每一C 程序都必须有一main()函数,可以根据自己的爱好把它放在程序的某个地方。有些程序员把它放在最前面,而另一些程序员把它放在最后面,无论放在哪个地方,以下几点说明都是适合的。1. main() 参数在Turbo C2.0启动过程中,传递main()函数三个参数:argc,argv和env。* argc: 整数,为传给main()的命令行参数个数。* argv: 字符串数组。转载 2016-12-04 15:03:37 · 1106 阅读 · 0 评论 -
苏嵌27 16.12.05
传入参数的个数 ↓int argc, char **argv(*argv[ ])↑命令行参数main函数传参 跟在命令后传参:命令行参数./demo hello1 hello2……输出argc = 3(命令行也算一个参数)./a.out hello1 hello2……输出argv[0] = ./a.outargv[1] = hello1原创 2016-12-06 16:17:11 · 205 阅读 · 0 评论 -
回调函数
生动的描述你到一个商店买东西,刚好你要的东西没有货,于是你在店员那里留下了你的电话,过了几天店里有货了,店员就打了你的电话,然后你接到电话后就到店里去取了货。在这个例子里,你的电话号码就叫回调函数,你把电话留给店员就叫登记回调函数,店里后来有货了叫做触发了回调关联的事件,店员给你打电话叫做调用回调函数,你到店里去取货叫做响应回调事件。专业的解释In computer p转载 2016-12-06 16:20:35 · 239 阅读 · 0 评论 -
服务器与客户端的基本操作
/******************* 服务器 *******************/ #include #include #include #include #include #include #include #define SERV_PORT 8000 int main(int a原创 2017-01-20 21:46:48 · 444 阅读 · 0 评论