随笔分类 -  C&C++

摘要:strchr函数用于在字符串s中搜索字符c,如果找到了字符c,则返回指向字符c的指针,如果没有找到则返回null。函数实现如下:290 /**291 * strchr - Find the first occurrence of a character in a string292 * @s: The string to be searched293 * @c: The character to search for294 */295 char *strchr(const char *s, int c)296 {297 for (; *s != (char)c; ++s)298 ... 阅读全文
posted @ 2012-05-29 15:58 移动应用开发 阅读(429) 评论(0) 推荐(0)
摘要:在Linux这类操作系统中,有大量的命令行处理程序,例如gcc -o test test.c,那么像这么多的命令行参数它是怎么去分析的呢,就要用到这里介绍的getopt函数。getopt函数最早出现在UNIX操作系统中,因为早期与操作系统交互全是命令终端下,最后这个函数就作为了GNU C的一部分。函数原型如下:int getopt(int argc, char * const argv[], const char *optstring);argc、argv当然是main中的argc和argv了,分别代表命令行参数个数和命令行参数列表。要使用这个函数,需要包含头文件unistd.... 阅读全文
posted @ 2012-05-29 15:41 移动应用开发 阅读(230) 评论(0) 推荐(0)
摘要:编译一个C程序需要经过预处理、编译、汇编和链接几个步骤,预处理是在编译之前所做的工作,预处理其实就是对源文件做一些编辑工作,为编译做好准备。1. 条件编译#ifconstant-expression#endif或者#ifconstant-expression#elifconstant-expression#else#endif测试一个符号是否被定义#if define(symbol)#ifdef symbol或#if !define(symbol)#ifndef symbol2. 文件包含文件包含使用include指令,它的本质是将包含的文件插入到include处。3. 宏定义define指令 阅读全文
posted @ 2012-05-08 23:58 移动应用开发 阅读(262) 评论(0) 推荐(0)
摘要:一、结构体前面的数组它是同种类型数据的集合,那要是不同种类型的数据怎么办,就需要用到这里的结构体。结构体它的成员可以是基本数据类型,也可以是复合数据类型。1. 结构体类型的定义struct point { int x; int y;};注意结构体类型的定义要以';'结尾。定义了一个结构体类型就相当于新定义了一个数据类型,我们可以使用这个数据类型来定义变量,和基本数据类型一样没有什么区别,例如:struct point a, b, c;结构体类型要包括struct关键字和结构体的名字。我们也可以在定义结构体的时候就定义变量,例如:struct point { int x; int 阅读全文
posted @ 2012-05-06 21:15 移动应用开发 阅读(249) 评论(0) 推荐(0)
摘要:前面我们看了如何去使用数组,在这里我们要关心更深层次的问题,它和更前面的指针是何种关系。1. 一维数组和指针前面我们操作数组都是通过数组名加下标的方式,那么这个数组名到底代表什么含义?其实数组名它是一个指针常量,它是一个地址,这个地址是数组的首地址,也就是数组第一个元素的地址。例如:int a[10];你可以去看一下,a, &a, &a[0]它都是同一个值,都是数组的首地址。那么这个指针常量它的类型的是什么呢,如果数组元素的类型是int类型的,那么这个指针常量的类型就是int*,像这里就是int*类型。还有要注意的是这个指针是一个常量,不能修改这个值,但是有两种情况下数组名不被 阅读全文
posted @ 2012-05-06 00:28 移动应用开发 阅读(199) 评论(0) 推荐(0)
摘要:数组是同种类型元素的集合。一、 一维数组1. 一维数组定义int a[10];这样我们便定义了一个数组a,它分配10个int类型空间。2. 数组的初始化我们可以在定义一个数组的同时对它进行初始化操作,例如:int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};甚至我们可以只对数组的部分元素进行初始化操作,例如:int a[10] = {1, 2, 3, 4, 5};这里我们只对数组的前5个元素做了初始化操作,剩下其它元素的值是未知的。如果我们对数组的所有元素都进行了初始化操作,那么我们甚至可以省略数组长度不写,编译器可以根据初始化数组元素的个数自动计算出数组的 阅读全文
posted @ 2012-05-03 23:22 移动应用开发 阅读(257) 评论(0) 推荐(0)
摘要:在谈到指针时,不得不说计算机内存和地址的概念。计算机内存以字节为单位由很多个存储单元组成,每一个存储单元都有一个地址,要访问一个存储单元时,必须要指定这个存储单元的地址。例如:一个1K大小的内存,它的地址范围是从0到1023。那指针又是什么呢?其实指针和普通变量没有什么区别,在32位计算机中,它存储的是一个32位整型数据,但是它和普通变量不同的是,它存放的数据被当作计算机内存的一个存储单元地址来使用。既然它要存储一个32位整型数据,所以一个指针变量的内存空间就是4字节大小,请记住,所有的指针变量都是4字节大小,因为它要存储一个32位地址。1. 一级指针int a = 4;int* p = &a 阅读全文
posted @ 2012-05-01 23:22 移动应用开发 阅读(334) 评论(0) 推荐(0)
摘要:我们在编写程序的时候,总不能将所有的程序放在一个源文件中,这样也不便于团队开发和维护。这就需要将程序有序的组织在不同的文件中,头文件中只是程序的接口部分,而在源文件中负责具体实现,如果其他源文件中有需要调用该源文件中的某个函数,只需要包含头文件即可。以欧几里德算法计算两个数的最大公约数为例:gcd函数的实现在euclid.c中/* The gcd() function */int gcd(int a, int b){ while (b) { int temp = b; b = a % b; a = temp; } return a;}对于扩展欧几里德算法ext_eucl... 阅读全文
posted @ 2012-05-01 16:20 移动应用开发 阅读(265) 评论(0) 推荐(0)
摘要:函数用于将一个大任务分割成若干个较小任务,最常见的就是main函数,main函数是整个程序的入口。关于main函数的写法,C标准定义了两种写法:如果不带参数可以这样写int main(void) { /* ... */ }如果带参数一般这样写int main(int argc, char *argv[]) { /* ... */ }argc表示参数的个数,argv为参数列表。一个设计的恰当的函数应该屏蔽具体设计细节,只留出相应接口,这样也便于维护。1. 按值传递一个函数包括参数列表和一个返回值,但是在操作函数时请注意,函数参数都是按值传递的。void swap(int a, int b){ . 阅读全文
posted @ 2012-05-01 00:26 移动应用开发 阅读(249) 评论(0) 推荐(0)
摘要:1. if语句. if语句if (x %2) y += x / 2;如果括号里的表达式为真,执行y += x / 2;语句。. if else语句if (x % 2 == 0) y += x / 2;else y += (x + 1) / 2;如果if中的表达式为真则执行if后面的语句,否则执行else后面的语句。. if else if语句if (x % 2 == 0) y += x / 2;else if (x % 4 == 1) y += 2 * ((x + 3) / 4);else y += (x + 1) / 2;2. switch语句switch (ch) { cas... 阅读全文
posted @ 2012-04-29 00:03 移动应用开发 阅读(296) 评论(0) 推荐(0)
摘要:1. 算术运算符+、-、*、/和%整数除法会舍去小数部分,取余运算只能是整型操作数。2. 关系运算符>、>=、<、<=、==和!=3. 自增和自减++和--注意这里前加和后加、前减和后减的区别。前加和前减表示在使用这个变量之前,先对这个变量进行加减操作,后加和后减表示在使用这个变量之后对这个变量进行加减操作。例如:int a, b, c, d;a = b = 10;c = ++a;d = b++;上面语句执行后a和b值都为11,但是c为11,d为10。4. 位操作符&、|、^、<<和>>5. 赋值操作符和赋值表达式=它还可以和其它运算符构 阅读全文
posted @ 2012-04-28 22:51 移动应用开发 阅读(184) 评论(0) 推荐(0)
摘要:1. 整型常量. 像123这一类型常量如无特别说明都是int类型常量。. long型常量要以l或L结尾,比如123456789L。. 无符号常量要以u或U结尾。. 整型常量除了用十进制表示外,还可以用八进制和十六进制表示,八进制前面加o,十六进制前面加0x。2. 字符常量. 字符常量用''表示,比如'y',本质上字符常量是一个整数,在计算机中一般用ASSCII码表示。. 我们可以用位模式来指定一个字节大小,格式为'\ooo'或'\xhh',其中ooo是一到三个八进制数字,hh是一到两个十六进制数字。3. 字符串常量c语言中虽然没有 阅读全文
posted @ 2012-04-28 22:10 移动应用开发 阅读(308) 评论(0) 推荐(0)
摘要:1. 整型数据类型. 整型数据类型有char、shortint、int和longint,其中shortint和longint可以省略int不写。它们都可加上unsigned和signed构成无符号和有符号整数,默认不写是有符号。C标准一般只有限定short不长于int,long不短于int。. 在c99中新增了一个整型数据类型,longlong int,当然也可以简写成longlong,表示64位整型。2. 浮点数据类型. float,double分别表示单精度和双精度浮点数据类型。. 在c99中新增了一个浮点数据类型,long double。3. 变量定义和初始化. 变量定义:所谓变量定义, 阅读全文
posted @ 2012-04-28 21:44 移动应用开发 阅读(160) 评论(0) 推荐(0)
摘要:370 #ifndef __HAVE_ARCH_STRLEN371 /**372 * strlen - Find the length of a string373 * @s: The string to be sized374 */375 size_t strlen(const char *s)376 {377 const char *sc;378379 for (sc = s; *sc != '\0'; ++sc)380 /* nothing */;381 return sc - s;382 }383 EXPORT_SYMBOL(strlen);38... 阅读全文
posted @ 2012-03-20 14:47 移动应用开发 阅读(459) 评论(0) 推荐(0)
摘要:240 #ifndef __HAVE_ARCH_STRCMP241 /**242 * strcmp - Compare two strings243 * @cs: One string244 * @ct: Another string245 */246 #undef strcmp247 int strcmp(const char *cs, const char *ct)248 {249 unsigned char c1, c2;250251 while (1) {252 c1 = *cs++;253 c2 = *ct++;254 ... 阅读全文
posted @ 2012-03-20 14:44 移动应用开发 阅读(4111) 评论(0) 推荐(0)