Poedu_C语言提升_Lesson01_20161108_数据类型

来源:互联网 发布:管易软件多少钱 编辑:程序博客网 时间:2024/06/07 03:57

数据类型

  • 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…

0 0
原创粉丝点击