C 系列
yang_yulei
这个作者很懒,什么都没留下…
展开
-
关于C/C++中全局变量的初始化问题的深入思考
前言:前日,在一次C++课程上,刘老师在举例说明构造函数和析构函数的功能时,提到了全局变量初始化时的构造函数的行为。构造函数在main函数之前初始化全局变量。当然在C++下我是深信不疑的。但随后老师声称C语言下的全局变量也是如此,因为C没有构造和析构函数,所以我们无法看到这一过程,在C++下可以在构造和析构函数中向屏幕打印信息,进而可以观察全局变量的初始化和生存期。这个观点无疑使我心头一震原创 2012-10-23 23:21:25 · 23695 阅读 · 4 评论 -
C语言全局变量那些事儿(深入C中最隐秘的地带)
【虽然自认为对C的角角落落都有所了解,但直到看到这篇文章,才知道C中的一些隐秘的坑,是自己之前不知道的。关于全局变量的链接问题,之前在我博客的某文章中有介绍过,一般对C有些了解的程序员都知道这个问题,但本文最后所提到的使用动态链接库所出现的问题,着实让我震惊。(心急的朋友,可跳过前面的,直接读“第4个例子”)所以,以后大家在使用全局变量的时候要留点心,良好的命名规范,在一定程度上可以避原创 2015-01-31 21:00:43 · 9193 阅读 · 1 评论 -
警惕缓冲区溢出(C中那些不安全的库函数)
C 和 C++ 不能够自动地做边界检查,边界检查的代价是效率。一般来讲,C 在大多数情况下注重效率。然而,获得效率的代价是,C 程序员必须十分警觉以避免缓冲区溢出问题。C语言标准库中的许多字符串处理和IO流读取函数是导致缓冲区溢出的罪魁祸首。我们有必要了解这些函数,在编程中多加小心。一、字符串处理函数strcpy()strcpy()函数将源字符串复制到缓冲区。没有指定要复制字符的具体数目!如果源字原创 2015-05-16 18:15:12 · 20428 阅读 · 2 评论 -
C语言的角落——C之非常用特性(一)
本文搜集整理了一些之前博客中没有提到的,C语言不常用的特性,算是对C系列的最后一次补充。对C语言有兴趣的朋友可以浏览一下,查漏补缺。变长参数列表 头文件定义了一些宏,当函数参数未知时去获取函数的参数变量:typedef va_list 宏:va_start()va_arg()va_end() va_list类型通过stdarg宏定义原创 2014-06-26 08:22:05 · 4679 阅读 · 1 评论 -
C语言的角落(二)——你不一定知道的C语言特性
之前写过一篇C的语言的角落,介绍了一些C中的一些非常用特性(http://blog.csdn.net/yang_yulei/article/details/34557625),最近又整理了一些边角的知识,特开此文。switch语句中的case(case 关键词可以放在if-else或者是循环当中)switch (a){ case 1:; // ..原创 2015-06-03 00:04:33 · 3607 阅读 · 6 评论 -
你精通C吗?test!
先来个简单的:#include int main(void){ inta[3][2] = { (0,1), (2,3), (4,5) } ; int*p ; p= a[0] ; printf(“%d”, p[0] ) ;}//如果你认为答案是0,那么错了。答案应该是1.仔细看看花括号里面嵌套的是小括号,而不是花括号。原创 2012-10-18 18:15:50 · 6576 阅读 · 8 评论 -
C语言精华记录——肆(数组与指针②)
肆数组与指针(二) 数组与指针的纠葛以指针的形式访问数组:下标表达式: 后缀表达式[表达式]在C语言中,根据定义,表达式e1[e2]准确地对应于表达式*((e1)+(e2))。因此,要求表达式e1[e2]的其中一个操作数是指针,另一个操作数是整数。且这两个操作数的顺序可以颠倒。故: a[4] 等同于 4[a] 等同于 *(a+4)编译器把所有的e1[e2]表达式转换原创 2012-10-14 23:29:40 · 2839 阅读 · 2 评论 -
C语言精华记录——柒(文件、输入输出函数)
柒文件文本文件和二进制文件实质:在计算机底层只有0和1。何谓文件?文件就是一些相关信息位的集合。文本文件只不过是把其文件存储空间按字节分割,即:它以字节为解释信息的单位,每个字节中存储的是一个ASCII码的小整数。二进制文件则是把文件存储空间当做内存一样,可在其中按数据类型定义并存储数据。例:把数据123存储到文件中。 若是按文本的方式来存储则会占用3字原创 2012-10-19 21:08:31 · 2114 阅读 · 0 评论 -
C语言结构体里的成员数组和指针(C语言的一个隐晦角落——关于零数组)
C语言结构体里的成员数组和指针(关于零数组)【转自酷壳网:http://coolshell.cn/articles/11377.html 作者:陈皓】单看这文章的标题,你可能会觉得好像没什么意思。你先别下这个结论,相信这篇文章会对你理解C语言有帮助。这篇文章产生的背景是在微博上,看到@Laruence同学出了一个关于C语言的题,微博链接。微博截图如下。我觉得好多人对这段代码的理解还不原创 2014-04-10 23:50:48 · 19475 阅读 · 11 评论 -
C语言精华记录——壹(变量的作用域及存储方式)
悟道系列之——C语言这是我的第一篇博文。对我来说CSDN并不陌生,但一直以来我都是一个默默的潜水者,可是今天我要冒泡了。特意选了十月一日来重新注册账号,我想赋予这个日子以新的意义。在进入正题之前,我想有必要简单的向大家介绍一下自己。本人80后后,刚毕业于一所普通师范类学校的化学专业。本人形象猥琐,身无长物,自觉难以为祖国的教育事业服务,遂混迹于程序猿们的队伍之中。本科四年,前半段浑浑噩原创 2012-10-13 20:20:54 · 3235 阅读 · 1 评论 -
C语言精华记录——玖(常用库函数)
玖字符串处理的库函数字符处理函数:int isdigit(int ch) ;//是否为数字,即ch是否是0-9中的字符int isxdigit(int ch) ;//是否为十六进制数字,即ch是否是0-9 a-z A-Z 中的字符int isalpha(int ch) ;//是否为字母int isalnum(int ch) ;//是否为字母或数字int i原创 2012-10-22 13:41:05 · 2533 阅读 · 1 评论 -
C语言精华记录——陆(结构、联合、位段、位级操作)
陆结构数据对齐:许多计算机系统对基本数据类型的合法地址做出了一些限制:要求某种类型对象的地址必须是某个值K(通常是2、4、8)的倍数,这种对齐限制简化了 处理器和存储系统之间接口的硬件设计。(因为:如果处理器经常从内存中取出8字节,若内存中一个存储器块单位是8个字节。则我们保证将所有double类型数据的地址对齐成8的倍数,那么就可以用一个存储器操作来读写值了! 否则,对象可能被分原创 2012-10-15 22:06:55 · 2751 阅读 · 0 评论 -
C语言精华记录——捌(预处理、程序调试、编程风格)
捌预处理C预处理器是一种简单的宏处理器。它在编译器读取源程序之前对C程序的源文本进行处理。预处理器一般从源文件中删除所有的预处理器命令行,并在源文件中执行这些预处理命令所指定的转换操作。【宏只是进行简单的文本替换】续行:所有的源文件行(包括预处理器命令行)都可以在行末加个反斜杠( \ )进行续行。这个操作发生在对预处理器命令进行扫描之前。【注意:续行符反斜杠之后不能有任何字原创 2012-10-22 13:42:56 · 2042 阅读 · 0 评论 -
C语言精华记录——叁(数组与指针①)
叁数组与指针(一) 指针是C的精华,如果未能很好地掌握指针,那C也基本等于没学。关于指针、数组、字符串,本人当年也是有过一段“惨绝人寰”的痛。好在多看书,多思考,多总结,多实践,方才有些心得。现在把当年的笔记摘录如下,希望能给初学者一些启发。 先附上两句话:第一句话:指针就是存放地址的变量。(就是这么简单。)第二句话:指针是指针,数组是数组。(只是它们经常穿着相似的原创 2012-10-14 23:17:59 · 3088 阅读 · 0 评论 -
C语言精华记录——伍(字符串、函数、动态内存分配)
伍字符串字符串是一种特殊的数组类型。字符串必须用’\0’作为结束标识。’\0’占用存储空间,但不计入串的实际长度。字符串的初始化:(编译器会自动在其尾部添加’\0’标识)char str[] = {‘a’, ‘b’, ‘c’} ; //标准形式char str[] = {“abc”} ; //简写char str[] = “abc” ;原创 2012-10-15 22:05:53 · 1830 阅读 · 0 评论 -
C语言精华记录——贰(几个关键字、几个运算符、隐式转换/溢出、表达式求值的顺序、左值和右值)
贰几个关键字sizeof1、sizeof是关键字而不是函数。例:int i=3; sizeof(i) ; 与 sizeof i ; 是完全等同。sizeof在计算变量所占空间大小时,括号可以省略,而计算类型大小时不能省略。(所以我们常在其后加上括号)2、sizeof的作用域是紧跟它后面的一个变量或类型。故:sizeof(int)*p;//p为指针,则此表达式原创 2012-10-13 20:31:53 · 3906 阅读 · 2 评论 -
C语言图形编程--俄罗斯方块制作(二)源代码
所有源代码文件,此为本人2年前所作,设计上还有些缺陷。希望大家不吝指正。/************************ (C) COPYRIGHT 2013 yang_yulei ************************* File Name : head.h* Author : yang_yulei* Date First Issu原创 2013-12-29 22:39:47 · 44722 阅读 · 19 评论 -
C语言图形编程--俄罗斯方块制作(一)详解
效果图 用C语言实现俄罗斯方块,需要先解决下面几个问题:1、如何用C语言绘制图形界面EasyX图形库(http://www.easyx.cn)即TC的图形库在VC下的移植。 包含库#include 先初始化图形窗口initgraph(WINDOW_WIDTH, WINDOW_HIGH) ;WINDOW_WIDTH为窗口的宽带,WINDOW_HIGH为窗口的高度。原创 2013-12-29 22:38:55 · 167354 阅读 · 9 评论 -
C之奇淫技巧——宏的妙用
一、指定的初始化很多人都知道像这样来静态地初始化数组:int fibs[] = {1,2,3,4,5} ;C99标准实际上支持一种更为直观简单的方式来初始化各种不同的集合类数据(如:结构体,联合体和数组)。 数组的初始化我们可以指定数组的元素来进行初始化。这非常有用,特别是当我们需要根据一组#define来保持某种映射关系的同步更新时。来看看一组错误码的定义原创 2014-06-18 08:39:14 · 11334 阅读 · 7 评论