C语言细节与技巧
作为当前最流行的编程语言,C语言应该是每一个程序员必备的技能。不过,C语言里面有许多容易忽略或者误解的细节,当然也有许多技巧,在此我做了一个总结,希望能对各位同仁有所帮助!
1.boolean类型
众所周知,C语言没有boolean类型,不过可以很轻松地通过typedef和enum自定义。
typedef enum { false=0, FALSE=0, true=1, TRUE=1 } bool;
2.enum技巧
enum其实就是把一个标识符对应到一个常数,枚举值默认从0开始,比如
enum { ZERO, ONE, TWO, OTHER }; // ZERO=0, ONE=1; TWO=2, OTHER=3
可以任意改变枚举对应的值,比如
enum { A=65, B, C, E=69, F, AA=65, BB }; // A=65, B=66, C=67, E=69, F=70, AA=65, BB=66
3.函数名和函数指针以及函数指针参数
在C语言里面,函数名其实就是指针,下面两种函数调用方式都是正确的,这是为了方便程序编写,编译器对代码做了优化,所以可以不用在函数名前面加上‘*’。
void say(const char *str) { printf("%s\n", str); } // 函数调用 say("hello world!"); (*say)("hello world!");
而对函数指针和函数指针参数而言,情况也是类似的。
void (*func_ptr)(const char *) = say; // 或者void (*func_ptr)(char *) = &say; func_ptr("hello world!"); // 或者(*func_ptr)("hello world!"); void my_func(void (*executed_func)(const char *), const char *str) { executed_func("hello world!"); // 或者(*executed_func)("hello world!"); }
4.int char转换
字符串转换数字,atoi, atol, atof分别对应int型,long型,double型。数字转换字符串要用到sprintf函数(stdio.h文件已包含)。
// 字符串转换为int char s[] = "4321"; int a = atoi(s); // int转换为字符串 int x = 1234; char str[12]; sprintf(str, "%d", x);
5.变量初始化
全局变量程序会自动初始化为0或者null,局部变量(静态局部变量除外)必须手动初始化,否则将会得到一些随机的数。数组初始化的时候应该注意,除了手动赋值之外其它的所有变量均初始化为0或者null。
// 以下情况为局部变量 int a[] = {1, 2, 3, 4}; // 长度固定可以省略 int b[12] = {1, 2}; // b[0]=1, b[1]=2, 其它均为0 char c[12] = "hi"; // c[0]='h', c[1]='i', 其它均为‘\0’ int *ptr[12] = {}; // 全部为null
6.whitespace对输入输出的影响
scanf函数输入字符可以接受所有的空字符(空格,制表符,回车),为了避免这种情况,可以在输入格式控制里面添加一个空格,这样就会忽略所有的空字符,知道读到下一个非空字符才输入。
int n; char c; scanf("%d%c", &n, &c); // 但输入为12 h的时候,n=12, c=' ' scanf("%d %c", &n, &c); // 但输入为12 h的时候,n=12, c='h' scanf("%d %c", &n, &c); // 但输入为12回车h的时候,n=12, c='h'
scanf函数输入字符串的时候不能接受空字符(空格,制表符,回车),即遇到这些字符的时候就会终止字符串的输入,但输入的字符串不为空(即!=""),如果字符串中要输入空格或者制表符,可以用gets函数,遇到回车即终止字符串的输入,即使当前字符串为空。
// 假设键盘输入为hello world! I love this world!之后回车 char str1[100]; char str2[100]; scanf("%s", str1); // str1="hello" gets(str2); // str2=" world! I love this world!"
另外,字符、字符串的输入输出也可以用getchar,putchar,gets,puts函数,getchar函数可以接受空字符,puts函数默认换行。
char c; char str[100]; c = getchar(); putchar(c); gets(str); puts(str);
补充一点小知识:%p是专门输出地址的,%o和%x都是以unsigned int类型解析,%.2s只输出字符串前2位,函数参数是自右往左解析的,即int n=1; printf("%d%d%d", n, n++, n++);结果是321。
7.一些容易混淆的C与C++特性
C跟C++实在太像了,以致有时候把它们混为一谈,下面是一些最容易在C语言里面误用的C++特性:
1)C函数参数不能赋默认值
2)C函数参数不能传别名即&的方式
3)C没有bool和string类型
4)C在for循环的括号里面不能声明变量
5)C声明一个struct类型之后,在使用的时候还必须在类型名前面加上struct关键字
相关推荐
本书概念清晰、内容新颖、实例详尽,是一本有关设计...为源代码提供了全面完整的解释 ● 提供了非常少见的有关C语言编程技巧的文档记录 ● 可以方便地在http://WWW.CS.princeton.edu/software/cii/访问本书的所有源码
剪切粘贴代码是编程过程中常见的操作,但在PTA平台上使用C语言编程时,我们需要特别注意一些细节和最佳实践。通过保持格式一致、避免多余字符、注意变量命名、理解代码逻辑以及使用代码片段管理工具等方法,我们可以...
这是一个蛮好的资料,与大家共享!! 共同努力,共同进步!!
此外,该项目还提供了一个很好的学习平台,帮助初学者熟悉C语言编程,掌握游戏开发的基本概念和技巧。通过实际运行和修改源码,学习者可以更深入地理解游戏开发的流程和细节,为自己的编程之路打下坚实的基础。
表、栈和队列3.1 抽象数据类型(ADT)3.2 表ADT3.2.1 表的简单数组实现3.2.2 链表3.2.3 程序设计细节3.2.4 常见的错误3.2.5 双链表3.2.6 循环链表3.2.7 例子3.2.8 链表的游标实现3.3 栈ADT3.3.1 栈模型3.3.2 栈的...
C语言作为一种经典的程序设计...2. 语法细节:如const与#define区别、static的作用、结构体内存对齐等。 3. 编程技巧:如枚举的应用、位运算技巧、宏定义技巧等。 4. 内存管理:如malloc/free使用、内存泄漏、内存对齐等
每个案例都配有详细的解析和注释,包括算法思路、代码实现和时间复杂度分析,帮助读者深入理解算法的原理和实现细节,并掌握解决类似问题的方法和技巧。 通过学习这些经典案例,读者不仅可以掌握C语言编程的基本...
包括烟花的爆炸、火花四溅、烟雾弥漫等细节。 2. **可定制的祝福信息**:用户可以根据需要输入自己的祝福信息,程序将在烟花效果中展示这些信息,为节日或特殊场合增添气氛。 3. **可二次开发**:项目采用模块化设计...
《动态符号链接的细节》 动态链接过程:函数 puts/printf 的地址在哪里? 更新时间:2008-2-26 《为可执行文件“减肥”》 ELF 详解:从”减肥”的角度一层一层剖开ELF文件 更新时间:2008-2-23 《代码测试、调试与...
C语言枚举类型深入讲解,超详细:enum经常使用的三种方法;枚举的本质;枚举和宏定义的对比分析;Linux内核中的枚举类型及使用技巧分析;使用枚举需要注意的一些细节,在这篇文档中都会详细讲解。
在某些情况下,还研究了影响实现运行时间的一些微小细节。. 一旦确定了解法,接着就要编写程序。随着计算机功能的日益强大,它们必须解决的问题也越来越大,越来越复杂,这就要求开发更加复杂的程序。本书的目的是...
C语言面试经典100题,初学者可参考,涉及很多语言细节和容易疏忽的技巧
很有用的参考资料,上传给大家分享,有很细节的编程技巧
本书中所论述的技术不仅填补 了初级与高级编程技术之间的空白,而且也为程序员们提供了一个有关编程技巧的信息来源。本书对经验丰富的程序员、技术带头人、自学的程序员及几乎不懂太多编程技巧的学生们都是大有裨益...
这个测试只是出题者为显示其对ANSI标准细节的知识而不是技术技巧而设计吗?这个愚蠢的问题吗?如要你答出某个字符的ASCII值。这些问题着重考察你的系统调用和内存分配策略方面的能力吗?这标志着出题者也许花时间在...
2.3.3 暂时不必关心的一些细节 2.3.4 int类型值的范围 2.3.5 int类型常量在代码中的其他写法 2.3.6 Dev C++中int类型的机器数 2.4 对数据类型的进一步讨论 2.4.1 int数据类型的运算 2.4.2 数学公式与数据类型 2.4.3 ...
本书以计算机学科的主干课程--数据结构为主线索组织内容,涵盖了计算机学科涉及到的大部分经典算法的实现,书中结合大量的图示和程序代码,展示了各种数据结构的实现细节和编程技巧,能够帮助学习者提高运用知识解决...
本书是经典程序设计思想与C++开发实践的完美结合,是C++之父回归校园后对C++编程原理和技巧的全新阐述。书中全面地介绍了程序设计基本原理,包括基本概念、设计和编程技术、语言特性以及标准库等,教你学会如何编写...