上一页 1 ··· 4 5 6 7 8 9 10 11 12 ··· 14 下一页
摘要: 第五章 表达式和操作符 一个表达式包括常量序列、标识符和操作符。程序中表达式的目的可能为了取得结果值,或赋值。 一个常量、字符串,或对象或函数的标识符均是一个表达式,复杂的表达式会使用括号,被称做主要表达式。 每个表达式都有一个类型,即为表达式结果值的类型,如果表达式不产生结果,它将具有void类型,下面是一些例子(假设变量a的类型为int, 变量z的类型为float_Complex)。Table 5-1. Example expressionsExpressionType'/n'inta + 1inta + 1.0doublea < 77.7int“A sting li 阅读全文
posted @ 2011-02-13 00:06 Socrates 阅读(128) 评论(0) 推荐(0) 编辑
摘要: C语言内存分配方式 (1) 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。 (2) 在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。 (3)从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存。动态内存的生存期由我们决定,使用非常灵活,但问题也最多 C语言跟内存申请相关的函数主要有 alloca,... 阅读全文
posted @ 2011-01-27 21:59 Socrates 阅读(379) 评论(0) 推荐(0) 编辑
摘要: 转自:http://tcpdump.anheng.com.cn/news/24/586.html网络数据采集分析工具TcpDump的简介顾名思义,TcpDump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。tcpdump就是一种免费的网络分析工具,尤其其提供了源代码,公开了接口,因此具备很强的可扩展性,对于网络维护和入侵者都是非常有用的工具。tcpdump存在于基本的FreeBSD系统中,由于它需要将网络界面设置为混杂模式,普通用户不能正常执行,但具备root权限的用户可以直接执 阅读全文
posted @ 2011-01-25 23:22 Socrates 阅读(199) 评论(0) 推荐(0) 编辑
摘要: 4.2.4 指针和整型之前的转换你可以显式地将指针转换为整数类型,反之亦然。此种转换的结果由编译器决定,且与编译器所运行的系统的地址结构有关。指针和整数类型的转换在系统编程中很有用,当程序访问物理地址(例如:ROM、I/O寄存器等)时也会使用。当你将指针转换为一个取值范围没有指针所表示值大的整数类型时,结果是不可定义的,相反地,转换一个整数为指针类型没有必要必须产生一个有效指针,例如: float x = 1.5F, *fPtr = &x; // A float, and a pointer to it. unsigned int adr_val = (unsigned int)fPt 阅读全文
posted @ 2011-01-23 19:40 Socrates 阅读(134) 评论(0) 推荐(0) 编辑
摘要: 4.2.3.2指针转换为限定的对象类型在C中,限定类型有const, volatile和restrict,例如,编译器隐式地转换任意指针为int,需要使用const int指针,如果你要删除掉限定词,就需要使用显式类型转换,如下例所描述: int n = 77; const int *ciPtr = 0; // A pointer to const int. // The pointer itself is not constant! ciPtr = &n; // Implicitly converts the address to the type // const int *. n 阅读全文
posted @ 2011-01-23 19:39 Socrates 阅读(133) 评论(0) 推荐(0) 编辑
摘要: 4.2.3 隐式指针转换编译器隐式地转换确定的指针类型,分配、条件表达式使用操作符==和!=,函数调用使用三种隐式的指针转换,如下节所描述,三种隐式指针转换:l 一个指针对象类型可以隐式地转换为void指针,反之亦然;l 一个给定类型的指针可以隐式地转换为一个该类型更合格的版本;l 一个null指针常可以隐式地转换为任意指针类型。4.2.3.1 指针转换为voidVoid指针为具有void *类型的指针,通常称为多用途指针,可以表示任意对象的地址,而不关心它的类型,例如,malloc()函数返回一个void指针,在你使用内存块前,void指针必须转换为指向一个对象的指针。Example 4-1 阅读全文
posted @ 2011-01-23 18:41 Socrates 阅读(126) 评论(0) 推荐(0) 编辑
摘要: 4.2.2 显式指针转换将一个指针转换为另一个指针类型,必须使用一个显示转换,一些情景下,编译器会提供隐式的转换,这些描述在本章后面的部分,指针也可以显式地转换为整型,反之亦然。4.2.2.1 对象指针你可以显示地转换一个对象指针为另一个对象指针类型。在程序中,你必须确保这种转换有意义。例如: float f_var = 1.5F; long *l_ptr = (long *)&f_var; // Initialize a pointer to long with // the address of f_var. double *d_ptr = (double *)l_ptr; // 阅读全文
posted @ 2011-01-23 18:39 Socrates 阅读(99) 评论(0) 推荐(0) 编辑
摘要: 4.2 非算术类型转换 指针和数组名,还有函数名也遵循隐式和显式类型转换,结构体和联合体不能转换,虽然它们的指导可以转换为其他的指针类型。4.2.1数组和函数操作指示符一个数组或函数操作指示符为具有类型的任何表达式,在大多数情况下,编译器隐式地转换一个数组的类型,及数组的名子转为数组首元素的指针,数组表达式在以下情景下不能转换为指针:l 当使用sizeof操作符操作数组时;l 当使用&操作符时;l 当使用字符串变量初始化char或wchar_t数组时;下面的例子示范了隐式转换数组操作符为指针,使用%p打印指针值:#include <stdio.h> int *iPtr = 阅读全文
posted @ 2011-01-21 23:37 Socrates 阅读(121) 评论(0) 推荐(0) 编辑
摘要: 4.1.5.3 有符号整型转换 整型类型转换中超过目标类型取值范围的问题,不仅存在在无符类型转换中,也存在有符号类型转换中,例如,当一个值由类型long或unsigned int转换为int,结果为有符号整型并溢出,这与转换为无符号整数不同,后者将会丢弃执行结果。 绝大多数编译会丢弃原来值二进制表示的高位,并将最低位解释为新类型,如下例所示,在这种策略下,一个unsigned int类型现有的位模式被解释为一个有符号int值。 #include <limits.h> // Defines macros such as UINT_MAX int i = UINT_MAX; // Re 阅读全文
posted @ 2011-01-18 23:48 Socrates 阅读(136) 评论(0) 推荐(0) 编辑
摘要: 4.1.5 算术类型转换结果 由于不同的类型有不同的目的、特性和局限性,将一个类型转换为另一类型通常要处理这些差异,通常,一个类型转换后的值取决于目标类型的特性。4.1.5.1 _Bool类型转换 任何标量类型可被转换为_Bool, 结果为0i.e. 当标量值为o时,使用false; 当标量值为1时或非0时,使用true; 因为一个null指针比喻为0,所以转换为_Bool后,其值为false.4.1.5.2 无符号整型转换 当整型值在新的无符号类型范围内时,它的值会被保护,换句话说,如果它们在0和Utype_Max之前,Utype_MAX为无符号类型的最大取值。 在无符号类型取值范围之外的值 阅读全文
posted @ 2011-01-17 00:06 Socrates 阅读(130) 评论(0) 推荐(0) 编辑
摘要: 本文转自CSDN博客:http://blog.csdn.net/v_JULY_v/archive/2011/01/13/6136261.aspxUnix编程艺术中的17点哲学原则 ---设计开发者的至高准则译者:July 二零一一年一月十三日。参考文献:The Art of Unix Programming By Eric Steven Raymond 博主说明:本文是依据unix编程艺术一书的英文版,第一章部分章节,所做的翻译。翻译过程中,参考了其中文版(姜宏等译)。若有更好的翻译意见,欢迎留言提议。---------------------------------------一、unix. 阅读全文
posted @ 2011-01-16 15:59 Socrates 阅读(206) 评论(0) 推荐(0) 编辑
摘要: 4.1.3常用算术转换 常用的算术类型转换为隐式转换,常用算术类型转换目标是为所有的操作数即操作结果寻找一个通用的类型。常用的算术类型转换涉及以下操作数:l 具有两个操作数的算术操作符: *, /, %, +和-l 关系操作符: <, <=, >, >=, ==和!=l 位操作符:&, |和^l 条件操作符:?:除关系操作符外,常用算术转换获得的公共实数类型通常为结果值的类型,然而,如果一个或多个操作数为复数类型,刚结果也具有复数类型。常用算术转换的应用如下:1. 如果任一个操作数为复数,此时,具有低转换等级的操作数转换为具有与其他操作数相同的类型,实数和虚数部 阅读全文
posted @ 2011-01-16 15:52 Socrates 阅读(121) 评论(0) 推荐(0) 编辑
摘要: 4.1 算数类型转换类型转换通常存在于任意两个算数类型中,当必要时,编译器隐式地执行它们,如果新类型能够表示它,此种转换将保护它的值,这通常也并不绝对,例如,当你将一个负数转换为无符号类型,或将一个浮点数的小数部分由double转换为int时,新类型不能表示原来的值,在这种情况下,编译器会产生一个告警。4.1.1 类型的层次当算术操作数具有不同的类型时,隐式类型转换由类型的层次来决定,类型的层次依据下列规则:l 任意两个无符号整数类型具有不同的转换等级,如果一个比另一个宽,它将具有较高等级;l 每一个有符号整数类型具有与相应的无符号整数类型相同的转换等级,char、signed char和un 阅读全文
posted @ 2011-01-14 23:52 Socrates 阅读(138) 评论(0) 推荐(0) 编辑
摘要: 第四章 类型转换在C中,不同类型的操作可以化合成一个操作,例如,下面的表述式: Double dVar = 2.5 //Define dVar as a variable of type double. dVar *= 3; //Multiply dVar by an integer constant. If ( dVar < 10L ) //Compare dVar with a long-integer constant { /* … */}当操作数据具有不同的类型时,确定的场景下,在执行操作前,编译器会尝试将它们转换来统一的类型,而且,你必须在程序中插入类型转换指令,类型转换产生的 阅读全文
posted @ 2011-01-12 23:59 Socrates 阅读(109) 评论(0) 推荐(0) 编辑
摘要: 3.4 字符串常量字符串常量包含一个字符序列(也包括空格),均位于一个双引号中,例如:“Hello world!/n”与字符常量一样,字符串常量可以包含源字符集中的所有字符,唯一例外就是使用双引号,反斜杠(/)、换行符等需要通过转义来表示,下面printf语句中首先产生一个警告音,接着,在双引号中指定一个目录,使用%s来替代指针doc_path的地址: Char doc_path[128] = “.//share//doc”; Printf(“/aSee the documentation in the directory /”%s/”/n”, doc_path”);字符串常量是一个静态cha 阅读全文
posted @ 2011-01-08 00:01 Socrates 阅读(201) 评论(0) 推荐(0) 编辑
摘要: 3.3 字符常量 字符常量由一个单引号中包含一个或多个字符组成。一些例子如下:‘a’ ‘XY’ ‘0’ ‘*’所有源字符集中的字符均可用于字符常量中,除去单引号(‘),反斜杠(/),及换行符,可以使用转义字符来表示这些字符: ‘/’’ ‘//’ ‘/n’在字符常量中所有需要转义的字符将在”转义字符”一节描述。3.3.1 字符常量的类型 字符常量具有int类型,除非它们被明确地使用前缀L定义为宽字符(wchart_t),如果一个字符常量仅含有占有一个字节的字符,它的值将是执行时字符集中的字符码。例如,常量a在ASCII编码中的十进制值为97,含有多个字符的字符常量其值因编译器的不同而各异。下面. 阅读全文
posted @ 2011-01-04 22:14 Socrates 阅读(203) 评论(0) 推荐(0) 编辑
摘要: 3.2 浮点常量浮点常量可被写为十进制或十六进制,在下面两个小节描述。3.2.1 十进制浮点常量一个普通的浮点常量由一个十进制数字包含一个小数点的序列组成。在科学计数法中,你也可以给它的值乘以10的幂。10的幂可以使用指数表示,引入字母e或E,一个包含指数的浮点常量不需要包含小数点,Table 3-2给出了一些十进制浮点常量的例子。Table 3-2. Examples of decimal floating-point constants浮点常量值10.0102.34E52.34 x 10567e-1267.0 x 10-12小数点可能是第一个或最后一个字符,因此,10.和.234E5都允许 阅读全文
posted @ 2011-01-03 23:53 Socrates 阅读(176) 评论(0) 推荐(0) 编辑
摘要: 第三章 常量 在C代码中,常量是表示一个固定值的记号,它可能是整型、浮点型、字符、或一个串。一个常量的类型由它的值和记法来决定。 这里讨论的常与混合常量不同,混合常量在C99标准中介绍,它通常是可修改的对象,类似于变量,了解混合常量的详细介绍和特殊操作可参见第五章。1.1 整型常量 一个整型常量可以以普通的十进制数表示,或者是八进制或十六进制,总之你必须通过前缀指定一个类型。一个十进制常量以一个非0的数字开始,例如,255。一个以前导0开始的数值被解释为八进制,八进制(以8为基数)仅使用数字0到7。例如,047是一个合法的八进制常量,表示4 * 8 + 7,它与十进制常量39等价。十进制常量2 阅读全文
posted @ 2011-01-03 22:07 Socrates 阅读(168) 评论(0) 推荐(0) 编辑
摘要: 转自:http://www.ibm.com/developerworks/cn/linux/management/configuration/index.html介绍每个 Linux 程序都是一个可执行文件,它含有操作码列表,CPU 将执行这些操作码来完成特定的操作。例如,ls 命令是由 /bin/ls 文件提供的,该文件含有机器指令的列表,在屏幕上显示当前目录中文件的列表时需要使用这些机器指令。几乎每个程序的行为都可以通过修改其配置文件来按照您的偏好或需要去定制。Linux 中有没有一个标准的配置文件格式?一句话,没有。不熟悉 Linux 的用户(一定)会感到沮丧,因为每个配置文件看起来都象 阅读全文
posted @ 2010-12-26 12:57 Socrates 阅读(139) 评论(0) 推荐(0) 编辑
摘要: 转自:http://www.ibm.com/developerworks/cn/linux/l-cn-shell-debug/一. 前言shell编程在unix/linux世界中使用得非常广泛,熟练掌握shell编程也是成为一名优秀的unix/linux开发者和系统管理员的必经之路。脚本调试的主要工作就是发现引发脚本错误的原因以及在脚本源代码中定位发生错误的行,常用的手段包括分析输出的错误信息,通过在脚本中加入调试语句,输出调试信息来辅助诊断错误,利用调试工具等。但与其它高级语言相比,shell解释器缺乏相应的调试机制和调试工具的支持,其输出的错误信息又往往很不明确,初学者在调试脚本时,除了知 阅读全文
posted @ 2010-12-19 11:24 Socrates 阅读(122) 评论(0) 推荐(0) 编辑
上一页 1 ··· 4 5 6 7 8 9 10 11 12 ··· 14 下一页