C语言
我是马克思小清新
这个作者很懒,什么都没留下…
展开
-
malloc,ralloc,calloc的区别
三个函数的原型void* realloc(void* ptr, unsigned newsize); void* malloc(unsigned size); void* calloc(size_t numElements, size_t sizeOfElement); 使用的时候都要加头文件stdlib.h。它们的作用是,请求系统分配地址,返回原创 2016-07-23 19:32:01 · 341 阅读 · 0 评论 -
小端字节和大端字节
小端字节序:低字节放在低地址处,高字节放在高地址处。大端字节序:低字节放在高地址处,高字节放在低地址处。int num = 0x12345678;用共用体来测试变量在内存中存放的字节顺序union node{ int num; char ch; };int main(){ union node n; n.num原创 2016-11-20 22:27:02 · 411 阅读 · 0 评论 -
8位有符号数的取值范围
首先我们知道,计算机以补码的形式存储的,正数的补码是原码不变,负数的补码是原 码 的取反加1。 我们先来看+127,原码0111 1111对吧,若+128是多少呢,0111 1111 + 1 = 1000 0000 (原码),然后存储时,计算机一看是最高位为1,就保持符号位不变,后面7位取反加 1,然后呢,进位舍弃,还是1000 0000(-128)。所以...转载 2016-12-05 22:42:51 · 6775 阅读 · 1 评论 -
数据结构--双向循环链表--插入
//把P赋值给S的前驱,如1a -> prior = p;//把P-> next 赋值给S的后继,如2a -> next = p -> next;//把s赋值给p->next的前驱,如3p -> next -> prior = s;//把s赋值给p的后继,如4p -> next = s...原创 2016-11-23 22:44:05 · 499 阅读 · 0 评论 -
进程和线程的区别
(1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位(2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行(3)拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源(4)系统开销:由于在创建或撤销进程时,操作系统为此所付出的开销将显著地大于在创建或撤消线程时的开销。类似的。进程切换的开销也远大于线程切换的开...转载 2016-12-07 22:46:27 · 247 阅读 · 0 评论 -
野指针及其有效的避免方法
野指针的生成及其产生的原因一,指向不确定地址的指针变量。(即没有初始化)使用野指针易因内存泄露出现段错误。而造成内存泄露的原因有两个:1,访问了没有权限的内存,如果正确使用指针,系统会给指针分配相应的内存空间,如果指针指向了的内存不是系统分配的,则判定为没有权限。2,访问了已经释放的内存。二,指针p被free或者delete之后,没有置为NULL,让人误以为p是个合法的指针。...原创 2016-07-16 16:30:23 · 876 阅读 · 0 评论 -
堆栈的初认识
平时都堆栈,堆栈地称呼“堆”和“栈”两个概念,还以为它们是同一个概念的,实际上是两个概念,之前我有对数据存放空间进行过基本了解,现在是针对堆和栈,进行比较分析。堆和栈都是一种数据结构,都可以数据项按序排序,都只能在一端对数据项进行插入与删除。堆: 1、堆是先进先出; 2、堆一般是由程序员分配的,生命周期也完全由使用者控制,如果程序员不释放,程序结束时可能由OS回收; 3...转载 2016-10-23 23:27:09 · 686 阅读 · 0 评论 -
基于UDP的编程步骤
基于UDP--服务器 1.创建一个socket,用函数socket()2.绑定IP地址、端口等信息到socket上,用函数bind()3.循环接收数据,用函数recvfrom()4.关闭网络连接 基于UDP--客户端 1.创建一个socket,用函数socket()2.绑定IP地址、端口等信息到socket上,用函数bind()3.设置对方的...原创 2016-11-14 19:51:28 · 408 阅读 · 0 评论 -
基于TCP的编程的大概步骤
基于TCP的服务器1. 创建一个socket,用函数socket()2. 绑定IP地址、端口等信息到socket上,用函数bind()3.设置允许的最大连接数,用函数listen()4.接收客户端上来的连接,用函数accept()5.收发数据,用函数send()和recv(),或者read()和write()6.关闭网络连接 基于TCP的客户端 1.创...原创 2016-11-14 19:31:04 · 479 阅读 · 0 评论 -
linux下的main 函数
main()函数,想必大家都不陌生了,从刚开始写程序的时候,大家便开始写main(),我们都知道main是程序的入口。那main作为一个函数,又是谁调用的它,它是怎么被调用的,返回给谁,返回的又是什么?这次我们来探讨一下这个问题。1. main()函数的形式先来说说main函数的定义,较早开始写C程序的肯定都用过这样的定义void main(){},其实翻翻C/C++标准,从来没有定义过voi...转载 2016-11-04 23:22:43 · 1841 阅读 · 0 评论 -
c语言栈实现括号匹配
在文字处理软件或编译程序设计时,常常需要检查一个字符串或一个表达式中的括号是否 相匹配? 匹配思想:从左至右扫描一个字符串(或表达式),则每个右括号将与最近遇到的那个左括 号相匹配。则可以在从左至右扫描过程中把所遇到的左括号存放到堆栈中。每当遇到一个 右括号时,就将它与栈顶的左括号(如果存在)相匹配,同时从栈顶删除该左括号。 算法思想:设置一个栈,当读到左...原创 2016-11-17 21:35:07 · 2794 阅读 · 0 评论 -
linux下printf()函数输出的条件
printf是一个行缓冲函数,先写到缓冲区,满足条件后,才将缓冲区刷到对应文件中,刷缓冲区的条件如下: 1 缓冲区填满 2 写入的字符中有‘\n’ '\r' 3 调用fflush手动刷新缓冲区 4 调用scanf要从缓冲区中读取数据时,也会将缓冲区内的数据刷新 满足上面4个条件之一缓冲区就会刷新原创 2016-07-14 16:10:43 · 579 阅读 · 0 评论 -
十进制转换成二进制及掩码生成
十进制转换成二进制void change (int num){ unsigned int temp; unsigned int mask = 1; int i;for(i = 31; i >= 0;i--){ temp = ((unsigned int)num >> i) & mask; printf("...原创 2016-07-17 23:21:15 · 1334 阅读 · 0 评论 -
数组的认识
一,数组1,数组的定义 #define MAX_SIZE 1000 int a[MAX_SIZE]; int a[MAX_SIZE][MAX_SIZE];可以省略行,但是不可以省略列使用宏定义来确定数组的大小,易于移植int a[]={1.2.3};此时数组的大小是sizeof(a) = 12; 2,将数组初始化为0 a[MAX_SIZE...原创 2016-07-18 17:16:29 · 295 阅读 · 0 评论 -
数组指针和指针数组
数组指针 int (*p)[n]; 首先P是一个指针,指向一个整型一维数组,这个数组的长度是n,也就是P的步长,如果P++,那么P就跳过n长度到下一个数组, 如果用指针定义一个二维数组 int a[3][4];原创 2016-07-19 19:33:51 · 211 阅读 · 0 评论 -
C语言中的关键字
register作用:请求编译器尽可能地将变量存在CPU内存寄存器中。而不是通过内存寻址访问的方 法,好处:省去了CPU处理访问内存数据的时间。注意事项:1,register修饰变量的类型必须是CPU能够接受,register变量必须是一个单个的值,并且长度应该小于或者等于整型的长度,2,register变量可能不是在内存中存储,所以不能用&来取地址,因为&原创 2016-07-28 08:44:37 · 264 阅读 · 0 评论 -
不借助中间变量求两个数的和
#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h> //不使用中间变量交换两个数的值void exchange_num(int *a, int *b){ ①* a =*a + *b; //适用范围广 * b = *a -* b; ...转载 2016-10-24 23:02:45 · 244 阅读 · 0 评论 -
linux平台--通讯录
代码:#include#include#include#define MAX_SIZE 1024struct node{ int id; char name[MAX_SIZE]; char phone[MAX_SIZE]; char address[MAX_SIZE]; struct node *next;};原创 2016-10-07 21:53:55 · 358 阅读 · 0 评论 -
网络编程基础知识
TCP/IP的分层模型OSI协议参考模型,它是基于国际标准化组织(ISO)的建议发展起来的,它分为7个层次:应用层、表示层、会话层、传输层、网络层、数据链路层及物理层。这个7层的协议模型虽然规定得非常细致和完善,但在实际中却得不到广泛的应用,其重要的原因之一就在于它过于复杂。但它仍是此后很多协议模型的基础。与此相区别的TCP/IP协议模型将OSI的7层协议模型简化为转载 2016-11-10 21:28:47 · 413 阅读 · 0 评论 -
sprintf函数
printf 是个变参函数,定义如下: int sprintf( char *buffer, const char *format [, argument] … );除了前两个参数类型固定外,后面可以接任意多个参数。而它的精华,显然就在第二个参数:格式化字符串上。printf 和sprintf 都使用格式化字符串来指定串的格式,在格式串内部使用一些以”%”开头的格式说明符(format sp...转载 2016-11-13 22:36:59 · 265 阅读 · 0 评论 -
linux进程通信---消息队列
进程通信方式----消息队列 消息队列就是一个消息的链表,可以把消息看作一个记录,具有特定的格式及特定的优先级。对消息队列有写权限的进程可以向中按照一定的规则添加新消息,对消息队列有读权限的进程可以从中读走消息。消息队列是随内核持续,只有在内核重启或者显示删除一个队列时,该消息队列才会真正被删除。消息队列的结构:队列头:struct msg_queue来描述,该结构体中包含消息队列...原创 2016-10-25 23:18:24 · 326 阅读 · 0 评论