Chinaunix首页 | 论坛 | 博客
  • 博客访问: 351966
  • 博文数量: 104
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 202
  • 用 户 组: 普通用户
  • 注册时间: 2013-08-01 13:57
文章分类

全部博文(104)

文章存档

2017年(16)

2016年(37)

2015年(15)

2014年(8)

2013年(28)

我的朋友

分类: C/C++

2013-09-12 00:23:00

原文地址: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;


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