十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
在 C 语言中经常会见到 enum、sizeof、typedef,那么我们今天就来讲解下它们三个。
为罗城等地区用户提供了全套网页设计制作服务,及罗城网站建设行业解决方案。主营业务为做网站、成都做网站、罗城网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
首先 enum 是 C 语言中的一种自定义类型,它是一种枚举类型。enum 值是可以根据需要自定义的整型值,第一个定义的 enum 值默认为 0。默认情况下的 enum 值是在前一个定义值的基础上加 1,enum 类型的变量只能取定义时的离散值。enum 中定义的值是 C 语言中真正意义上的常量,在一般工程中 enum 多用于定义×××常量。
下来我们就来写个示例代码分析下,代码如下:
#includeenum { ARRAY_SIZE = 5 }; void InitArray(int array[]) { int i = 0; for(i=0; i 我们来分析下这个代码,它利用 enum 定义了常量 ARRAY_SIZE,然后创建数组并打印。我们来看下编译结果是否如我们所愿呢?打印如下:
那么我们看到打印确实如我们所想。
接下来我们来讲讲 sizeof 关键字,它是编译器的内置指示符,用于计算类型或变量所占内存打小。那么它所计算的值在编译期就已经确定,也就是说在运行期是没用的。sizeof 于类型时:sizeof(type);用于变量时:sizeof(var) 或 sizeof var。sizeof 是 C语言的内置关键字而不是函数,在编译过程中所有的 sizeof 将被具体的数值所替换,程序的执行过程与 sizeof 没用任何关系。我们来看看 下面这个示例代码会输出什么?
#includeint f() { printf("hello world\n"); return 0; } int main() { int var = 0; int size = sizeof(var++); printf("var = %d, size = %d\n", var, size); size = sizeof(f()); printf("size = %d\n", size); return 0; } 我们先来分析下这个代码,在程序的第14行我们做了 var++,理论上第16行打印出来的结果会是 1 和 4。在程序的第18行看似调用了 f() 函数,那么照我们的分析,将会在第20行打印出 4,但是在前面硬打印出 hello world 这句话。下来我们来看看是否如我们所分析的那样呢?
那么这是怎么回事呢?跟我们分析的不一样,var 不等于 1,并且也没有打印出 hello world 那句。我们来仔细想想上面讲的 sizeof 的相关知识,它是在程序的编译期有效的,也就是说程序运行之后并没有去执行 var++,所以 var 仍然等于 0。sizeof 是关键字而不是函数,所以在程序的第18行并不是去调用 f() 函数,自然也就不会去执行函数里的打印语句。因为函数的返回值是 int 型,所以打印的值为 4。
最后我们再来讲讲 typedef关键字。我们通常以为 typedef是定义一种新的类型,其实不是的。typedef用于给一个已经存在的数据类型重命名,其本质上是不能产生新的类型的。注意:它命名的类型可以在 typedef 语句之后,但是不能被 unsigned 和 signed 所修饰。
我们以示例代码来分析下,代码如下:
#includetypedef int Int32; struct _tag_point { int x; int y; }; typedef struct _tag_point Point; typedef struct { int length; int array[]; } SoftArray; typedef struct _tag_list_node ListNode; struct _tag_list_node { ListNode* next; }; int main() { Int32 i = -100; unsigned Int32 ii = 0; Point p; SoftArray* sa = NULL; ListNode* node = NULL; return 0; } 我们来分析这个代码,我们在第19行显然是先重命名后定义的,这种在 C 语言中是合法的。第28行用 unsigned 修饰重命名的类型,这显然是错误的,因此会在28行报错。第29行相当于 struct _tag_point p;第31行相当于 struct _tag_list_node* node;我们来看看编译结果
那么我们注释掉第28行之后,编译就通过了。那么我们今天讲解了 enum、sizeof、typedef ,总结如下:1、enum 用于定义离散值类型,并且它定义的值是真正意义上的常量;2、sizeof 是编译器的内置指示符,不参与程序的执行过程;3、typedef 用于给类型重命名,并且重命名的类型可以在 typedef 语句之后定义。后面我们会继续对 C 语言的学习。
欢迎大家一起来学习 C 语言,可以加我QQ:243343083。
当前文章:C之enum、sizeof、typedef(十一)
文章网址:http://6mz.cn/article/gjhccd.html