- 博客(49)
- 资源 (18)
- 问答 (1)
- 收藏
- 关注
转载 day03
一.c++ 之父给c程序员建议 1.尽量的少使用宏 使用const 或者枚举 来表达常量值 使用inline 减少函数调用开销 使用泛型 和 模板 来刻画一组 函数 或类型 2.使用命名空间 减少命名冲突 3.变量随时用 随时定义 以保证初始化 4.尽量避免强制类型转换 类型转换一般是程序 设计问题 转换是错误的
2015-07-30 14:44:53 269
转载 day02
一.函数重载 1.1 函数重载的原理 在生成函数的调用名 c++语言不但要考虑函数 名还要考虑参数列表。而c语言只考虑函数 名 所以不能形成重载。 1.2 函数重载引入的问题 跨编译器调用问题 extern "C" 指定按照c语言的方式来生成调用的 函数名。 二.函数
2015-07-30 14:44:18 309
转载 day15
复习:1.基于UDP通信的模型1.1 概念 TCP 传输控制协议,面向连接的协议优点:在通信全程保持连接,保证数据的安全性和完整性,可 以重发数据缺点:服务器端的压力比较大,资源占用率比较高 UDP 用户数据报协议,非面向连接的协议优点:不需要保持连接,服务器压力比较小,资源占用率比 较低缺点:不保证数据的安全性和完整性
2015-07-30 14:41:42 219
转载 day14
今天内容:(1)基于UDP通信的模型(2)线程和多线程以及多线程的同步问题1.基于UDP通信的模型1.1概念TCP 传输控制协议,面向链接的协议UDP 用户数据报协议,非面向链接的协议1.2 区别(1)TCP是一种面向链接的协议,在通信的全程保持链接,优点:可以保证数据的完整性和安全性以及准确性,并且可以重发所有数据,缺点:服务器压力比较大,资源占用
2015-07-30 14:41:05 205
转载 day13
复习:1.使用信号量集进行进程间的通信1.1概念信号量是一个计数器,用于控制同时访问资源的进程数信号量集是信号量的集合,可以用于控制多种不同资源的访问问题1.2计数器的工作方式(1)初始化计数器最大值(2)如果有进程申请资源,那么计数器-1(3)当计数器为0时,停止进程对资源的申请,申请的进程进入阻塞状态(4)如果有进程释放资源,那么计数器+1(5)
2015-07-30 14:40:11 245
转载 day12
今天的内容:(1)IPC-使用信号量集进行通行(2)网络编程 -网络常识,本地通信,网络通信1.信号量集1.1概念(1)什么叫信号量?信号量就是一个计数器,用于控制同时访问资源的进程数,解决有限资源的分配问题。 (2)什么叫信号量集信号量集 信号量的集合,也就是由多个信号量组成的数组,可以同时控制多种资源的分配问题1.2 计数器的工作方式
2015-07-30 14:39:03 250
转载 day10
XSI IPC之共享内存和消息队列(有固定的套路)共享内存/消息队列/信号量集 遵循相同的规范,因此在编程上有很多共性的东西。共同点:1.XSI IPC都是系统内核管理的,叫内核结构。2.XSI IPC都由外部的key ,类型是key_t,可以定位IPC结构。3.外部key的获取方式有三种:3.1 宏IPC_PRIVATE 做key,这种方式程序员基本上不用,因
2015-07-30 14:37:45 277
转载 day09
回顾: 进程fork() 进程的退出 - 正常退出和非正常退出 正常退出: 主函数return exit() _Exit() 非正常退出: 信号结束 wait()和waitpid() - 父进程等待子进程的结束 进程的创建方式二: vfork() + execl() pid_t pid = vfork(); if(pid==0){
2015-07-30 14:37:05 228
转载 day11
1.自我介绍 马如忠 maruzhong/ruzhong ma 小马哥/马哥 marz@tarena.com.cn2.综合项目2.1 项目名称 银行账户管理系统2.2 项目功能 开户 销户 存钱 取钱 转帐 查询余额 退出2.3 项目分析(1)采用C/S架构设计客户端: 给用户提供一个界面,让用户选择相应的功能,然后将用
2015-07-30 14:37:05 282
转载 day07
回顾: 一些文件相关函数: lseek() - 设置文件读写的位置(偏移量) dup() dup2() - 复制文件描述符,但不复制文件表 fcntl() - 提供一些额外的操作,包括:复制文件描述符/设置获取文件描述符的部分状态(不全)/文件锁 stat() fstat() - 获取文件在硬盘上各种数据(ls -il) access() - 判断是否
2015-07-30 14:35:52 227
转载 day08
今天:进程结束 -fork() /退出进程/父进程等待子进程vfork() Unix/Linux 信号(信号处理)break退循环,return 退函数,exit()退进程程序员退出进程的方式:正常退出:1.在主函数中执行了return语句(特殊方式)2.exit()退进程(通用方式) 3 _exit()或_EXIT()函数退出进程(立
2015-07-30 14:35:11 243
转载 day06
回顾: 文件读写及其相关函数: open() read() write() close() 今天: lseek() 其他的一些文件相关函数 lseek() off_t lseek(int fd,off_t offset,int whence) 功能:就是设置文件偏移量,确定读写的位置 参数:fd就是文件描述符 offset和
2015-07-30 14:35:02 181
转载 day05
文件和文件的读写函数(讲和练综合 重点)由于在Linux系统中,文件几乎可以代表一切,因此,操作文件的函数也可以操作其他的一些设备/东西。文件相关函数包括:文件读写函数/非读写函数标c文件读写函数:fopen() fread() fwrite() fclose()标c取文件大小的函数:fseek(SEE_END) 再调ftell()的返回值就是文件的大小标c的函数不能直
2015-07-30 14:34:25 250
转载 day04
六个函数malloc() free() sbrk() brk() mmap() munmap()文件读写函数(uc版)malloc()和free()malloc()分配的堆区内存,一次申请小块内存时,系统会映射33个内存页,如果申请大块内存(31个内存页以上),系统会映射比申请的稍多一点的内存页数。 malloc()申请内存时,除了数据占用的空间外,还需
2015-07-30 14:33:37 262
转载 day03
环境变量的库函数:getenv() -按环境变量的名取得环境变量的值setenv() -新增环境变量或修改/不改变已存在的环境变量putenv() -新增环境变量或修改已存在环境变量unsetenv() -删除一个环境变量clearenv() -全部删除环境变量Unix/Linux的内存管理(UC的真正开始)内存分配和回收的相关函数及实现关系进程的内存空间划
2015-07-30 14:32:48 276
转载 day02
静态库和共享库(动态库)c程序员的错误处理环境变量和环境表一个操作系统是非常复杂的,根据非常多的系统函数,如何管理这些系统函数?比如:函数a()究竟来自与那个.o文件?需要把这些.o文件打包,打包成静态库(.a)或者共享库(.so)。静态库和共享库的区别静态库是代码的归档,在使用静态库时是采用的复制的代码的方式。共享库是可执行文件的组成部分,在使用共
2015-07-30 14:30:48 256
转载 c编译选项
Unix系统高级编程-UC(15)Unix系统函数为主-大量的Unix系统调用Unix系统的原理-内存如何管理,进程如何设计……培养大家的动手能力-能做一些有实际意义的软件(商业开发)建议:1.多动手,多写程序,为现在招工作更方便。2.有机会一定提升自己的学历,最好28,29岁左右开始升研。UC的主要内容:1.Unix/Linux系统(了解)2.
2015-07-30 14:28:12 435
转载 函数指针
/* 函数指针演示 */#include int add(int num, int num1) {return num + num1;}int main() {int (*p_add)(int, int) = NULL; printf("add是%p\n", add);p_add = add;printf("p_add(3, 8)是%d\n
2015-07-30 14:13:54 240
转载 动态内存分配
/* 动态分配内存演示 */#include #include int main() {//int arr[5] = {1, 2, 3, 4, 5}; /*for (num = 0;num printf("%d ", arr[num]);}printf("\n");*/ int num = 0, size = 0; prin
2015-07-30 14:11:05 197
转载 结构体简介
/* 结构体演示 */#include #include /*struct phone {char manu[20];char model[20];float price;};typedef struct phone phone;*/typedef struct /*phone*/ {char manu[20];char model[20
2015-07-29 15:39:06 325
转载 条件编译
/* 条件编译演示 */#include int main() {//#ifdef ONE#ifndef TWOprintf("1\n");#elseprintf("2\n");#endifreturn 0;}/* 点菜练习 */#include int main() {int
2015-07-27 10:53:57 186
转载 宏操作
/* 宏演示 */#include #define PI 3.14f#define CIRCLE(r) 2 * PI * rint main() {int radius = 0;const float pi = 3.14f;printf("请输入一个半径:");scanf("%d", &radius);
2015-07-27 10:50:24 340
翻译 文件操作
/* 文件操作代码框架 */#include int main() {FILE *p_file = fopen("a.txt", "w");/*if (p_file) {//fclose(p_file);p_file = NULL;}*/if (!p_file) {return 0;}//fclose(p_file);p_fi
2015-07-24 11:21:05 222
翻译 main参数介绍
/* 主函数参数演示 */#include int main(int argc, char *argv[]) { int num = 0;for (num = 0;num printf("%s\n", argv[num]);}return 0;}
2015-07-23 20:36:59 176
翻译 字符简介
/* 字符串演示 */#include int main() {//char str[] = "abc";//char str[3] = {'a', 'b', 'c'};//char str[3] = {'a', 'b', 'c', '\0'};char str[] = {'a', 'b', 'c', '\0'};printf("%p\n", "abc"
2015-07-22 17:21:21 237
翻译 关于指针
/* 函数作业*/#include /*void reverse(int arr[], int size) {int pos1 = 0, pos2 = size - 1;while (pos1 int tmp = arr[pos1];arr[pos1] = arr[pos2];arr[pos2] = tmp;pos1++;pos2--
2015-07-22 13:02:57 268
原创 编写一个函数将数组中的数字前后颠倒,并输出到屏幕上来。
#includevoid func(int arr[],int size){ int i=0; for(i;i int temp=arr[i]; arr[i]=arr[size-i-1]; arr[size-i-1]=temp;
2015-07-20 21:01:52 2631
翻译 递归函数简介
会调用自己的函数叫递归函数如果一个问题本身很复杂无法直接找到答案,但是它可以 被分解成几个小问题,至少有一个小问题和原来的大问题在本质上是一样的只不过简单一点。这种问题就适合采用递归方法来解决。编写递归函数的过程1.用语句描述出问题的分解方式(这时要假设递归 函数已经完成了)2.在递归函数的开头写一个分支把不可分解的情况 处理掉(这个分
2015-07-20 12:11:13 544
翻译 从键盘上得到一个1到100的数字,打印这个数字的二进制。
#includeint main(){ int num,i; printf("input num which is in 1 to 100\n"); scanf("%d",&num); for(i=0x80;i>=1;i>>=1){ printf("%d",(num&i)!=0);
2015-07-15 21:46:37 567
原创 1.编写程序从键盘得到代表小时,分钟和秒的三个 整数数字,把这个时间的下一秒打印在屏幕上 hh:mm:ss
#includeint main(){ int h,m,s; printf("input current time\n"); scanf("%d %d %d",&h,&m,&s); if(s==59){ s=0; if(m==59){ m=0;
2015-07-15 21:20:52 4627
转载 将一个1到127之间的数字转换成二进制
#includeint main(){ int num,base=128; int i; printf("input 1 to 127\n"); scanf("%d",&num); num=num%base; printf("%d",num/base); bas
2015-07-15 15:29:37 1434
原创 将一个1到127之间的数字转换成二进制
#includeint main(){ int num,i=0; int arr[8]={}; printf("please input number which is in 1 to 127\n "); scanf("%d",&num); for(i=0;i arr
2015-07-15 15:16:26 1203
翻译 用c语言编写输出四个整数,这四个整数可以表示1到40之间的任意一个数字。
#includeint main(){int a,b,c,d; //表示四个整数int n1,n2,n3,n4; //表示四个整数的系数int x,flag;for(a=1;afor(b=a+1;bfor(c=b+1;cif((d=40-a-b-c)>=c){for(flag=1,x=1;xfor(flag=0,n1=1;n1>-2;n1--)for(
2015-07-15 12:28:58 1163
转载 16.常用函数
calloc函数也可以动态分配存储区它会把分配好的存储区自动清0为了使用这个函数需要包含stdlib.h头文件这个函数需要两个参数,一个参数表示存储区 的个数,另外一个参数表示单个存储区的大小realloc函数可以调整一段已经分配好存储区的 个数函数指针可以和函数捆绑把函数的地址记录在函数指针中就实现了它们 之间的捆绑
2015-07-14 14:48:27 195
转载 15.数据类型
同类型的结构体变量之间可以直接使用赋值 操作符进行赋值结构体不适合作为函数的形式参数使用,因为 这样会造成时间和空间的浪费应该采用结构体指针作为函数的形式参数结构体可以作为函数的返回值存储区使用,但是 这样也会造成时间和空间的浪费应该使用结构体指针作为函数的返回值存储区不要把局部结构体变量的地址赋值给结构体 指针返回值存储
2015-07-14 14:47:02 239
转载 14.条件编译
宏操作符包括#和##这两个操作符都是对宏不代表数字的参数进行 处理的#操作符可以把一个参数转换成字符串字面值(在参数前后各加一个")##操作符可以把一个代表标识符的参数和其他内容合并得到一个新标识符条件编译可以在编译的时候决定哪些语句需要编译 哪些语句不需要编译条件编译是使用预处理指令实现的#ifdef/#ifndef...#el
2015-07-14 14:45:10 312
转载 13.文件指针
文件位置指针是一个整数,他用来记录下一次 对文件进行读写操作的时候开始位置到文件头之间包含多少个字节当从文件中读出n个字节或者向文件中写入n个字节 的之后文件位置指针都会自动向后移动n个字节可以在程序中使用函数察看或者修改文件位置 指针的数值ftell函数可以察看文件位置指针的数值 ftell(p_file));返回值就是当前
2015-07-14 14:44:15 347
转载 12.文件操作
可以采用如下两种方法记录多个相关 字符串1.采用二维数组 这种方法记录相关字符串会造成内容浪费 而且存储区使用不够灵活2.采用指针数组 这种方法记录相关字符串不会浪费内存而且 存储区的使用比较灵活记录普通变量地址的指针叫一级指针记录一级指针变量地址的指针叫二级指针二级指针可以和指针数组捆绑(记录第一个指针
2015-07-14 14:42:37 231
转载 11.字符介绍
数组做形式参数的时候真正的形式参数是一个指针如果在函数中不会修改指针形参所捆绑的存储区则 应该在指针形参前加const关键字任何存储区的地址都可以作为实际参数和指针形参 配合使用使用指针形式参数可以让被调用函数使用其他函数的 存储区无类型指针的一个主要用途就是作为函数的形式参数 使用指针也可以作为函数的返回值使用,
2015-07-14 14:40:37 370
转载 10.指针
3.const关键字可以用来声明不可赋值的变量 const变量只能在初始化的时候使用赋值操作符4.volatile关键字用来声明多变的变量 指针变量是一种变量,它专门用来记录地址数据地址数据的使用方法和普通数据的使用方法完全不同只要把一个存储区的地址记录在一个指针变量中就 可以通过这个指针变量找到这个存储区我们可以把通过指针变量找到的存储区叫做指针变量
2015-07-14 14:38:54 505
heatshrink.zip
2020-03-18
C118213_STM32L431RBT6_2017-11-22.PDF
2019-08-01
qt creator快速入门
2017-11-07
OpenCL编程指南
2017-06-15
想做个关于c语言的小项目
2015-07-27
TA创建的收藏夹 TA关注的收藏夹
TA关注的人