随笔分类 -  c 语言

liunx c
摘要:刚才转载了一篇文章《情景分析“C语言的const关键字”》,csdn上也有一篇《Const用 法小结》,可能很多人看了这两篇文章之后就对const绝望了,太复杂了。其实const并不复杂,它是有规则的,不然设计语言的语法就不好弄了(大家看 一下编译原理就好理解了)。下面就说一下我对const的理解:我觉得,语言里面的关键字,都有一个修饰域(即这个关键字修饰那块范围),还有一个修饰方向(即从 那里开始修饰)。对于c类似的语言(c,c++,java),关键字的修饰方向都是从向右的,即关键字不会修饰它左边的东西。从编译原理的角度就好理解为 什么这样了,我们现在编译器采用的基本都是LR(k)进行语法分 阅读全文
posted @ 2010-12-17 12:46 flyxiang
摘要:1) #define是预处理指令,在编译预处理时进行简单的替换,不作正确性检查,不关含义是否正确照样带入,只有在编译已被展开的源程序时才会发现可能的错误并报错。例如: #define PI 3.1415926 程序中的:area=PI*r*r 会替换为3.1415926*r*r 如果你把#define语句中的数字9 写成字母g 预处理也照样带入。 2)typedef是在编译时处理的。它在自己的作用域内给一个已经存在的类型一个别名,但是You cannot use the typedef specifier inside a function definition。 3)typedef int 阅读全文
posted @ 2010-12-17 12:45 flyxiang
摘要:三个函数的申明分别是:void* realloc(void* ptr, unsigned newsize);void* malloc(unsigned size);void* calloc(size_t nelem, size_t elsize);都在stdlib.h函数库内它们的返回值都是请求系统分配的地址,如果请求失败就返回NULLmalloc用于申请一段新的地址,参数size为需要内存空间的长度,如:char* p;p=(char*)malloc(20);calloc与malloc相似,参数nelem为申请地址的单位元素长度,elsize为元素个数,如:char* p;p=(char*) 阅读全文
posted @ 2010-12-17 12:42 flyxiang
摘要:1.这样的初始化有什么问题?char *p = malloc(10); 编译器提示“非法初始式” 云云。答:这个声明是静态或非局部变量吗?函数调用只能出现在自动变量(即局部非静态变量) 的初始式中。因为静态变量的地址必须在编译的过程中就确定下来而malloc()申请的内存地址是在运行时确定的。2. *p++ 自增p 还是p 所指向的变量?答:后缀++ 和-- 操作符本质上比前缀一目操作的优先级高, 因此*p++ 和*(p++) 等价, 它自增p 并返回p 自增之前所指向的值。要自增p 指向的值, 使用(*p)++, 如果副作用的顺序无关紧要也可以使用++*p。3 我有一个char * 型指针正 阅读全文
posted @ 2010-12-17 12:40 flyxiang
摘要:#include stdio.hint printf( const char *format, ... );printf()函数根据format(格式)给出的格式打印输出到STDOUT(标准输出)和其它参数中. 字符串format(格式)由两类项目组成 - 显示到屏幕上的字符和定义printf()显示的其它参数. 基本上, 你可以指定一个包含文本在内的format(格式)字符串,也可以是映射到printf()其它参数的"特殊"字符. 例如本代码 char name[20] = "Bob";int age = 21;printf( "Hello %s, you are %d years ol 阅读全文
posted @ 2010-12-17 12:31 flyxiang