`
Marshal_R
  • 浏览: 129834 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

C语言细节与技巧

阅读更多

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语言接口与实现——创建可重用软件的技术

    本书概念清晰、内容新颖、实例详尽,是一本有关设计...为源代码提供了全面完整的解释 ● 提供了非常少见的有关C语言编程技巧的文档记录 ● 可以方便地在http://WWW.CS.princeton.edu/software/cii/访问本书的所有源码

    PTA平台上C语言代码的剪切与粘贴技巧与最佳实践.zip

    剪切粘贴代码是编程过程中常见的操作,但在PTA平台上使用C语言编程时,我们需要特别注意一些细节和最佳实践。通过保持格式一致、避免多余字符、注意变量命名、理解代码逻辑以及使用代码片段管理工具等方法,我们可以...

    c语言编程技巧(编程的很多细节问题都在里面)

    这是一个蛮好的资料,与大家共享!! 共同努力,共同进步!!

    c语言c++项目源代码_c语言实现的超级玛丽游戏源码.rar

    此外,该项目还提供了一个很好的学习平台,帮助初学者熟悉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语言中的一些算法和面试题

    C语言作为一种经典的程序设计...2. 语法细节:如const与#define区别、static的作用、结构体内存对齐等。 3. 编程技巧:如枚举的应用、位运算技巧、宏定义技巧等。 4. 内存管理:如malloc/free使用、内存泄漏、内存对齐等

    C语言算法100例经典案例题.rar

    每个案例都配有详细的解析和注释,包括算法思路、代码实现和时间复杂度分析,帮助读者深入理解算法的原理和实现细节,并掌握解决类似问题的方法和技巧。 通过学习这些经典案例,读者不仅可以掌握C语言编程的基本...

    c语言c++项目源代码_c语言实现非常漂亮祝福烟花效果.rar

    包括烟花的爆炸、火花四溅、烟雾弥漫等细节。 2. **可定制的祝福信息**:用户可以根据需要输入自己的祝福信息,程序将在烟花效果中展示这些信息,为节日或特殊场合增添气氛。 3. **可二次开发**:项目采用模块化设计...

    C语言编程透视

    《动态符号链接的细节》 动态链接过程:函数 puts/printf 的地址在哪里? 更新时间:2008-2-26 《为可执行文件“减肥”》 ELF 详解:从”减肥”的角度一层一层剖开ELF文件 更新时间:2008-2-23 《代码测试、调试与...

    跟涛哥一起学嵌入式30:C语言枚举类型深入剖析.pdf

    C语言枚举类型深入讲解,超详细:enum经常使用的三种方法;枚举的本质;枚举和宏定义的对比分析;Linux内核中的枚举类型及使用技巧分析;使用枚举需要注意的一些细节,在这篇文档中都会详细讲解。

    数据结构与算法分析,C语言版

    在某些情况下,还研究了影响实现运行时间的一些微小细节。. 一旦确定了解法,接着就要编写程序。随着计算机功能的日益强大,它们必须解决的问题也越来越大,越来越复杂,这就要求开发更加复杂的程序。本书的目的是...

    C面试经典100题

    C语言面试经典100题,初学者可参考,涉及很多语言细节和容易疏忽的技巧

    TMS320LF240x DSP C语言开发应用.part1_subjectqbm_dsp_源码

    很有用的参考资料,上传给大家分享,有很细节的编程技巧

    代码大全(中文版)第二版

    本书中所论述的技术不仅填补 了初级与高级编程技术之间的空白,而且也为程序员们提供了一个有关编程技巧的信息来源。本书对经验丰富的程序员、技术带头人、自学的程序员及几乎不懂太多编程技巧的学生们都是大有裨益...

    C语言测试:想成为嵌入式程序员应知道的0x10个基本问题

    这个测试只是出题者为显示其对ANSI标准细节的知识而不是技术技巧而设计吗?这个愚蠢的问题吗?如要你答出某个字符的ASCII值。这些问题着重考察你的系统调用和内存分配策略方面的能力吗?这标志着出题者也许花时间在...

    狂人C程序员入门必备

    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++之父回归校园后对C++编程原理和技巧的全新阐述。书中全面地介绍了程序设计基本原理,包括基本概念、设计和编程技术、语言特性以及标准库等,教你学会如何编写...

Global site tag (gtag.js) - Google Analytics