随笔分类 -  C基础

摘要:引言 在用C++的项目源码中,经常会不可避免的会看到下面的代码: 1 2 3 4 5 6 7 8 9 #ifdef __cplusplus extern "C" { #endif /*...*/ #ifdef __cplusplus } #endif 1 2 3 4 5 6 7 8 9 #ifdef 阅读全文
posted @ 2016-09-08 11:12 星语海蓝 阅读(637) 评论(0) 推荐(0) 编辑
摘要:ssprintf和sscanf函数的使用总结: 1、前言 我们经常涉及到数字与字符串之间的转换,例如将32位无符号整数的ip地址转换为点分十进制的ip地址字符串,或者反过来。从给定的字符串中提取相关内容,例如给定一个地址:http://www.bokeyuan.cn:2345,我们要从地址中提出协议 阅读全文
posted @ 2016-09-06 10:21 星语海蓝 阅读(617) 评论(0) 推荐(0) 编辑
摘要:转自:http://buluzhai.iteye.com/blog/845404 首先感谢作者!!我使用的是cJSON:http://sourceforge.net/projects/cjson/先看json的数据结构c中没有对象,所以json数据是采用链表存储的C代码如下: 1 typedef ... 阅读全文
posted @ 2015-05-06 17:47 星语海蓝 阅读(4180) 评论(0) 推荐(0) 编辑
摘要:1基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定。 也就是说extern有两个作用,第一个,当它与"C"一起连用时,如: extern "C" void fun(int a,... 阅读全文
posted @ 2015-04-08 16:53 星语海蓝 阅读(282) 评论(0) 推荐(0) 编辑
摘要:数据结构中的排序算法。排序算法的相关知识:(1)排序的概念:所谓排序就是要整理文件中的记录,使之按关键字递增(或递减)次序排列起来。(2)稳定的排序方法:在待排序的文件中,若存在多个关键字相同的记录,经过排序后这些具有相同关键字的记录之间的相对次序保持不变,该排序方法是稳定的。相反,如果发生改变,这... 阅读全文
posted @ 2014-05-14 20:46 星语海蓝 阅读(4234) 评论(0) 推荐(0) 编辑
摘要:1.在C中,当我们无法列出传递函数的所有实参的类型和数目时,可以用省略号指定参数表void foo(...);void foo(parm_list,...);这种方式和我们以前认识的不大一样,但我们要记住这是C中一种传参的形式,在后面我们就会用到它。2.函数参数的传递原理 函数参数是以数据结构:栈... 阅读全文
posted @ 2014-04-18 10:13 星语海蓝 阅读(320) 评论(0) 推荐(0) 编辑
摘要:程序1:void myMalloc(char *s) //我想在函数中分配内存,再返回{ s=(char *) malloc(100); }void main() { char *p=NULL; myMalloc(p); //这里的p实际还是NULL,p的值没有改变,为什么? if(p) free(p); }程序2:void myMalloc(char **s) { *s=(char *) malloc(100); } void main() { char *p=NULL; myMalloc(&p); //这里的p可以得到正确的值了 if(p) free(p); }程序3: #incl 阅读全文
posted @ 2013-08-30 10:37 星语海蓝 阅读(701) 评论(0) 推荐(0) 编辑
摘要:二级指针又叫双指针。C语言中不存在引用,所以当你试图改变一个指针的值的时候必须使用二级指针。C++中可以使用引用类型来实现。下面讲解C中的二级指针的使用方法。例如我们使用指针来交换两个整型变量的值。错误代码如下:一级指针[cpp]view plaincopy#includevoidswap(int*a,int*b){int*tmp=NULL;tmp=a;a=b;b=tmp;}intmain(intargc,char**argv){inta=2;intb=3;printf("Beforeswapa=%db=%d\n",a,b);swap(&a,&b);prin 阅读全文
posted @ 2013-08-30 10:12 星语海蓝 阅读(341) 评论(0) 推荐(0) 编辑
摘要:不管实在C还是C++代码中,typedef这个词都不少见,当然出现频率较高的还是在C代码中。typedef与#define有些相似,但更多的是不 同,特别是在一些复杂的用法上,就完全不同了,看了网上一些C/C++的学习者的博客,其中有一篇关于typedef的总结还是很不错,由于总结的很好, 我就不加修改的引用过来了,以下是引用的内容(红色部分是我自己写的内容)。用途一:定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如:char* pa, pb;// 这多数不符合我们的意图,它只声明了一个指向字符变量的指针,// 和一个字符变量;以下则可行:typedef ch. 阅读全文
posted @ 2013-01-10 10:52 星语海蓝 阅读(202) 评论(0) 推荐(0) 编辑
摘要:open:系统调用,返回的是文件描述符,即文件句柄,是文件在文件描述副表里的索引。fopen:C语言库函数,返回的是一个指向文件结构的指针。fopen是ANSI C标准中的C语言库函数,在不同的操作系统中应该调用不同的内核API,UNIX环境下,fopen是对open的封装。文件描述符是UNIX/Linux下的一个概念,Linux环境下,一切设备皆是文件,一切设备皆是以文件的形式进行操作,如网络套接字、硬件设备等。有关文件描述符和文件指针的区别可以参见博文:《文件描述符和文件指针的区别》。设备文件不可以当成流式文件来处理,因此,只能使用open,而fopen只是用来操纵正规文件的,并且设置有缓 阅读全文
posted @ 2012-12-28 10:02 星语海蓝 阅读(666) 评论(0) 推荐(0) 编辑
摘要:函数的形参和实参/* 形参全称为"形式参数"是在定义函数名和函数体的时候使用的参数,目的是用来接收调用该函数时传递的参数. 形参的作用是实现主调函数与被调函数之间的联系. 实参全称为"实际参数"是在调用时传递该函数的参数.实参可以是常量、变量、表达式、函数等. 形参和实参的类型必须要一致,或者要符合隐含转换规则,当形参和实参不是指针或引用类型时,在该函数运行时,形参和实参是不同的变量,他们在内存中位于不同的位置,形参将实参的内容复制一份,在该函数运行结束的时候形参被释放,而实参内容不会改变。 而如果函数的参数是指针或引用型类型变量,在调用该函数的过程中, 阅读全文
posted @ 2012-11-30 16:30 星语海蓝 阅读(548) 评论(0) 推荐(0) 编辑
摘要:网上存在一些找出两个字符串中最大的公共子串的代码,但是在我看来他们写的都太复杂了,所以我也写了一个算法,效率不算高,还凑合,但是我觉的他的实现比较简单,代码也比较好维护,代码如下: #include<iostream> #include<cstring> #include<cassert> using namespace std; //找出两个字符串中最长的公共子串(如果存在多个 , 返回第一个) //参数:str1 字符串1 // str2 字符串2 // maxSubStr 找到的最大子串 void findMaxSubstr(const char .. 阅读全文
posted @ 2012-11-02 15:51 星语海蓝 阅读(2308) 评论(0) 推荐(0) 编辑
摘要:restrict:restrict只适用于指针,它声明一个指针是唯一初始化访问一个数据对象。int ar[10];int* restrict restar=(int *)malloc(10*sizeof(int));int* par=ar;for(int n=0; n<10; n++) { par[n]+=5; restar[n]+=5; ar[n]*=2; par[n]+=3; restar[n]+=3;}restar指针是restrict类型,par指针就不是,因为par即没有初始化也不是唯一访问ar数组的变量。那么,上面的程序,因为restar是唯一反问数据块的指针,... 阅读全文
posted @ 2012-10-31 19:03 星语海蓝 阅读(254) 评论(0) 推荐(0) 编辑
摘要:restrict:restrict只适用于指针,它声明一个指针是唯一初始化访问一个数据对象。int ar[10];int* restrict restar=(int *)malloc(10*sizeof(int));int* par=ar;for(int n=0; n<10; n++) { par[n]+=5; restar[n]+=5; ar[n]*=2; par[n]+=3; restar[n]+=3;}restar指针是restrict类型,par指针就不是,因为par即没有初始化也不是唯一访问ar数组的变量。那么,上面的程序,因为restar是唯一反问数据块的指针,... 阅读全文
posted @ 2012-10-31 19:01 星语海蓝 阅读(235) 评论(0) 推荐(0) 编辑
摘要:Linux网络编程--网络知识介绍客户端和服务端 网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端.客户端 在网络程序中,如果一个程序主动和外面的程序通信,那么我们把这个程序称为客户端程序。 比如我们使用ftp程序从另外一 个地方获取文件的时候,是我们的ftp程序主动同外面进行通信(获取文件), 所以这个地方我们的ftp程序就是客户端程序。服务端 和客户端相对应的程序即为服务端程序。被动的等待外面的程序来和自己通讯的程序称为服务端程序。 比如上面的文件获取中,另外一个地方的程序就是服务端,我们从服务端获取文件过来。互为客户和服务端 实际生活中有些程序是互为服 阅读全文
posted @ 2012-10-27 15:51 星语海蓝 阅读(1488) 评论(0) 推荐(0) 编辑
摘要:昨晚被@童老猪问到了两者的区别,我以前觉得自己大概搞懂了,昨晚发现还是没懂。今天查了一下资料,写下自己的理解,以备以后查阅。我们都知道,文本文件和二进制文件在计算机上面都是以0,1存储的,那么两者怎么还存在差别呢?我觉得,对于编程人员,文本文件和二进制文件就是一个声明,指明了你应该以什么方式(文本方式/二进制)打开这个文件,用什么函数读写这个文件(读写函数),怎么判断读到这个文件结尾。具体的说:1。以哪种方式打开一个文件?ANSI C规定了标准输入输出函数库,用fopen()函数打开文件。fopen()函数的调用方式一般为:FILE *fp;fp=fopen(文件名,使用文件方式);使用文件方 阅读全文
posted @ 2012-10-18 09:34 星语海蓝 阅读(3856) 评论(0) 推荐(0) 编辑
摘要:一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 堆(heap):由malloc,new等分配的空间的地址,地址由低向高增长(程序员释放)。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。 栈(stack):是自动分配变量,以及函数调用所使用的一些空间(所谓的局部变量),地址由高向低减少; 3、全局区(静态区)(static)— 全局变量和静态变量的存储是放在一块的... 阅读全文
posted @ 2012-09-27 11:50 星语海蓝 阅读(4353) 评论(0) 推荐(1) 编辑
摘要:浮点数的表示是不精确的,不能直接比较两个数是否完全相等,一般都是在允许的某个范围内认为像个浮点数相等,如有两个浮点数a,b,允许的误差范围为1e-6,则abs(a-b)<=1e-6,即可认为a和b相等。还有一种方法就是扩大再取整,比如a=5.23,b=5.23,直接比较 a==b一般为false,但是a和b都扩大一百倍,然后强制转换为int类型,再用==比较就可以了 float型变量和“零值”比较的方法: const float EPSINON = 0.000001; if ((x >= - EPSINON) && (x <= EPSINON)) 浮点型变量并 阅读全文
posted @ 2012-09-23 21:49 星语海蓝 阅读(1123) 评论(0) 推荐(0) 编辑
摘要:首先引用《C和指针》p141中的理论:在C中, 在几乎所有使用数组的表达式中,数组名的值是个指针常量,也就是数组第一个元素的地址。 它的类型取决于数组元素的类型: 如果它们是int类型,那么数组名的类型就是“指向int的常量指针“。看到这里我想应该就知道为什么 会有I 和 III式的结果了。对于II 和 IV 则是特殊情况,在《C和指针》p142中说到,在以下两中场合下,数组名并不是用指针常量来表示,就是当数组名作为sizeof操作符和单目操作符&的操作数时。 sizeof返回整个数组的长度,而不是指向数组的指针的长度。 取一个数组名的地址所产生的是一个指向数组的指针,而不是一个指向某 阅读全文
posted @ 2012-09-23 21:20 星语海蓝 阅读(345) 评论(0) 推荐(0) 编辑
摘要:sizeof()功能:计算数据空间的字节数1.与strlen()比较strlen()计算字符数组的字符数,以"\0"为结束判断,不计算为'\0'的数组元素。而sizeof计算数据(包括数组、变量、类型、结构体等)所占内存空间,用字节数表示。2.指针与静态数组的sizeof操作指针均可看为变量类型的一种。所有指针变量的sizeof 操作结果均为4。注意:int *p; sizeof(p)=4; 但sizeof(*p)相当于sizeof(int);对于静态数组,sizeof可直接计算数组大小;例:int a[10];char b[]="hello&qu 阅读全文
posted @ 2012-09-23 15:08 星语海蓝 阅读(249) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示