您的位置:首页 > 编程语言 > C语言/C++

Poedu_C语言提升_Lesson01_20161108_数据类型

2016-12-16 22:05 288 查看

数据类型

1.数据类型并不是数据类型,不要掉进这个坑。它只是用来规定大小以及定位。在汇编中,只能操作一种数据单位——byte。数据类型直接定义了一套模板,规定了大小,让我们不用一个个的byte去做。

2.sizeof是一个操作符,用来得到数据类型的本质——多少byte

变量名本质:内存地址的别名,可以使用别名访问内存

3.表示方式

基础数据类型:

如int、char、double等,在前面博客中有详细讲述,此处不再赘述

自定义数据类型:

typedef:给一个变量类型绑定一个别称

typedef 原类型 别名;

如:typedef unsigned long UINT;

需要分号,define是直接展开,是编译器层面做的这件事情,不用加分号 。

typedef和define的顺序是相反的,上面的例子如果用define,则应该是#define UINT unsigned long

typedef在函数指针的时候的作用会显得更加强大

自定义类型更容易理解语义

4.使用方式

格式

类型 变量名;

属性

atuo:

在栈中分配数据,所以局部变量中的类型都默认是auto,有auto的都是分配在栈中。

如果用auto定义一个全局函数,编译器会因矛盾而报错

static:只在作用域内才可操作,能够变化的常量

作用

1.保存一个静态区内存

2.限制作用域(包括用static定义的变量和函数)

在局部函数中被static定义的变量,只有在这个局部函数中才能进行修改

在.c中定义的static函数只能在这个.c中文件进行调用

存储在程序的静态区,它的生命周期和全局函数差不多,但是作用域不同,只初始化一次(再次调用函数,碰到初始化的时候会忽略),看个例子:

int Try()

{

   static int count=0;

   count++;

   return count;

}

int main()

{

  for(int i=0;i<10;i++)

  Try();

  return 0;

}


代码中,我在Try这个函数内,定义了一个static的变量count,我在main函数中进行了10次循环调用,那么最后count的值是多少呢?

答案是10。

如果将代码改成这样呢:

int Try()

{

  int count=0;

  count++;

  return count;

}

int main()

{

  for(int i=0;i<10;i++)

  Try();

  return 0;

}


现在答案是多少呢?

在return count那下断点,count是1,如果执行完Try再看,count已经被销毁了

两段代码的差别,就是在static上,在第一次调用count时,进行了初始化的操作。如果这个变量是static的,那么之后再调用n次也不会再进行int count=0这个操作。如果不是,则是每次调用,每次初始化为0。

也就是在一次调用过后,这个变量count的的值就存在了,且会一直存在,是不是有点像全局变量?所以说它的生命周期和全局函数差不多。但是,这个局部函数中的static变量不能被外部函数访问,只能被自已访问,这就是和全局变量的区别。

register

用法

register int num=0;

for(;num<10000;num++);


作用

将num存储于寄存器中:寄存器中的对数据的操作速度很快

注意:

(1)寄存器中没有地址,内存中才有

(2)必须是单个寄存器能够接受的值:操作系统是64位,能够接受的是64位;32的程序,只能是32位的

(3)仅仅请求,不一定成功

(4)不能用于全局,编译器会矛盾

extern

用法

extern int num;

作用

在其它文件中定义了,如果本文件中没有,编译器就会在其它文件中找。但是不安全。

5.生命周期

当前地址存在的时间

比如我们常说的全局变量,它的生命周期和程序此次运行的时间是相等的。程序退出时,全局变量才会销毁。而局部变量的生命周期,看情况而定,因为我们上面讲了一个static…
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: