Chinaunix首页 | 论坛 | 博客
  • 博客访问: 6276990
  • 博文数量: 2759
  • 博客积分: 1021
  • 博客等级: 中士
  • 技术积分: 4091
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-11 14:14
文章分类

全部博文(2759)

文章存档

2019年(1)

2017年(84)

2016年(196)

2015年(204)

2014年(636)

2013年(1176)

2012年(463)

分类: C/C++

2013-09-07 01:55:33

原文地址:C语言深入剖析(1) 作者:mq24705

一、基本数据类型分析
1.什么是数据类型?
  数据类型可以理解为固定内存大小的别名,是创建变量的模子。
2.变量本质
  变量是一段实际连续存储空间的别名,程序中通过变量来申请并命名存储空间,通过变量名来使用存储空间。
实例剖析:
  1 #include
  2
  3 typedef int INT32;//自定义变量类型
  4 typedef unsigned char BYTE;
  5 typedef struct _demo
  6 {
  7     short s;
  8     BYTE b1;
  9     BYTE b2;
 10     INT32 i;
 11 }DEMO;
 12
 13 int main()
 14 {
 15     INT32 i32;
 16     BYTE byte;
 17     DEMO d;
 18
 19     printf("%d, %d\n",sizeof(INT32),sizeof(i32));
 20     printf("%d, %d\n",sizeof(BYTE),sizeof(byte));
 21     printf("%d, %d\n",sizeof(DEMO),sizeof(d));
 22     return 0;
 23 }

二、auto,register,static分析
1.C语言中的变量可以有自己的属性,在定义变量的时候可以加上“属性”关键字,“属性”关键字指明变量的特有意义。
2.auto即C语言中局部变量的默认属性,编译器默认所有的局部变量都是auto的。auto变量存储在程序的栈中。
3.static关键字指明变量的“静态”属性,同时具有“作用域限定符”的意义。static修饰的局部变量存储在程序静态区,static的另一个意义是文件作用域限定符。
    ----static修饰的全局变量作用域只是声明的文件中,同时修饰的函数作用域只是声明的文件中。
4.register关键字指明变量存储于CPU寄存器中,register只是请求寄存器变量,但不一定请求成功。
    ----register变量的值必须是CPU寄存器可以接受的值,不能用&运算符获取register变量的地址,因为register变量存储于寄存器中而不在内存中。
实例剖析:
  1 #include
  2
  3 int g = 0;
  4 int m = 0;
  5
  6 void f1()
  7 {
  8     int i = 0;
  9     i++;
 10     printf("%d\n",i);
 11 }
 12
 13 void f2()
 14 {
 15     static int i = 0;//静态局部变量只被初始化一次,生命周期是程序运行期。
 16     i++;
 17     printf("%d\n",i);
 18 }
 19 int main()
 20 {
 21
 22     auto int i = 0;
 23     register int j = 0;//常用于非常重视性能的实时系统。
 24     static int k = 0;
 25
 26     for(i = 0; i < 5; i++){
 27         f1();
 28     }
 29     for(i = 0; i < 5; i++){
 30         f2();
 31     }
 32
 33     return 0;


阅读(307) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~