美文网首页
C语言变量类型

C语言变量类型

作者: 朱森 | 来源:发表于2015-12-21 11:09 被阅读67次

C语言变量类型

auto

static

external

static external

register

auto 局部变量

auto 变量是用堆栈(stack)方式占用储存器空间,因此,当执行此区段是,系统会立即为这个变量分配存储器空间,而程序执行完后,这个堆栈立即被系统收回.在大括号{}内声明.

自动变量就是指在函数内部定义使用的变量。他只是允许在定义他的函数内部使用它。在函数外的其他任何地方都不能使用的变量。自动变量是

局部变量,即它的区域性是在定义他的函数内部有效。当然这说明自动变量也没有链接性,因为它也不允许其他的文件访问他。由于自动变量在定义他的函数的外面

的任何地方都是不可见的,所以允许我们在这个函数外的其他地方或者是其他的函数内部定义同名的变量,他们之间不会发生冲突的。因为他们都有自己的区域性,

而且它没有链接性(即:不允许其他的文件访问他的)。来看看自动量的持续性。计算机在执行这个函数的时候,创建并为它分配内存,当函数执行完毕返回后,自

动变量就会被销毁。这个过程是通过一个堆栈的机制来实现的。为自动变量分配内存就压栈,而函数返回时就退栈。

static 静态变量

static 变量是C程序编译器以固定地址存放的变量,只要程序不结束,内存不被释放.

静态变量与自动变量的本质区别是,静态变量并不像自动变量那样使用堆栈机制来使用内存。而是为静态变量分配固定的内存,在程序运行的整个过程中,它都会被

保持,而不会不销毁。这就是说静态变量的持续性是程序运行的整个周期。这有利于我们共享一些数据。如果静态变量在函数内部定义,则它的作用域就是在这个函

数内部,仅在这个函数内部使用它才有效,但是它不同于自动变量的,自动变量离开函数后就会别销毁,而静态变量不会被销毁。他在函数的整个运行周期内都会存

在。在函数外面定义的变量为全局变量,工程内的所有文件都可以访问他,但是它在整个工程内只能定义一次,不能有重复的定义,不然就会发生错误,而其他的文

件要想使用这个变量,必须用extern来声明这个变量,这个声明叫做引用声明。这一点很重要,如过你没有用extern

来声明在其他文件中已经定义的全局变量,就来使用它,就会发生错误如果你只是想在定义他的文件中使用它,而不允许在其他的文件中使用它,那么就用关键字

static来在函数外面声明变量。这样这个变量在其他文件中将不可见,即它的连接性而内部链接。有一点是我们只得注意的像:如果你在函数外这样声明一个

变量,const int a ;

变量a的连接性为内部链接,只能在定义他的文件内使用。还有如果你在定义静态变量的时候并没有给变量初始化,则静态变量将被自s动初始化为0;

external 变量

外部变量 定义在程序外部,所有的函数很程序段都可以使用.

外部变量可能会在某一程序段被重新定义,以段内变量为参考值.

static external 变量

静态外部变量和外部变量差别在于,外部变量生命可以同时给多个文件使用,而静态外部变量则只能给声明此变量的文件使用.

register 变量

寄存器变量,是由寄存器分配空间,访问速度比访问内存快,加快执行速度.寄存器大小有限.

在c语言当中可以使用寄存器变量来优化程序的性能,最常见的是在一个函数体当中,将一个常用的

变量声明为寄存器变量: register int ra;

如果可能的话,编译器就会为它分配一个单独的寄存器,在整个函数执行期间对这个变量的操作全都是对这个寄存器进行操作,这时候就不用频繁地去访存了,自然

就提高了性能。但是寄存器变量不是强制性的,也就是说,即使你使用register关键字去声明一个变量为寄存器变量,编译器还是有可能把它作为一个普通

的变量而不是寄存器变量来使用的。

需要注意的是,目前C编译器还不允许全局寄存器变量,也就是说寄存器变量只能是局部变量或者函

数形参变量,而且最好是int,char或者指针类型变量。在声明寄存器变量的时候,可以制定使用哪个寄存器,在X86平台上常用的有”ebp,

ebx, esi, edi“。可以这样声明: register int local_var __asm__("ebp");

这时候需要在编译程序的时候给出特别的选项,因为有些寄存器原本是另有用途的,比如ebp寄存器,原来是做frame-pointer用途的,在调试程序

的时候可以用它来跟踪程序的调用关系。这时候我们使用 -fomit-frame-pointer 选项来指明这一点。

相关文章

  • C语言内存

    在阐述C语言内存布局之前,首先我们来介绍一下C语言变量的类型;在C语言中的变量类型有自动变量,全局变量,静态变量以...

  • C#语言入门详解006

    006 C#类型、变量与对象详解 目录 *什么是类型*类型在C#语言中的作用*C#语言的类型系统*变量、对象与内存...

  • 二、编程中基础知识

    1、强类型语言与弱类型语言 变量需要先定义,然后才能使用,这种叫做强类型语言,比如c,c++,Java等。变量不需...

  • 如何得到C语言表达式的类型

    C语言允许两个不同整数类型的变量,如char类型变量与int类型变量相加。C语言标准称之为整型提升。那么我们如何通...

  • C语言14 指针类型

    C语言14 指针类型 指针是C语言中的一种数据类型, 定义带 "*"类型的变量 总结: 任何带有*的变量类型的标...

  • 语言种类

    1.强类型语言和弱类型 弱类型语言允许将一块内存看做多种类型。比如直接将整型变量与字符变量相加。C and C++...

  • C语言变量类型

    C语言变量类型 auto static external static external register aut...

  • 2018-05-13

    C语言:c语言中没有字符串类型,也没有字符串变量,字符串是放在字符型数组中的。 C语言数变量类型:整型、浮点型、v...

  • 第5周:数据类型——5.1 数据类型

    1. C 是有类型的语言 C 语言的变量,必须在使用前定义,并且确认类型。 早期语言强调类型,面向底层的语言强调类...

  • TS数据类型:类型别名/联合类型/字面量类型/类型推论等纲要

    在学C/C++ Java等强类型语言时,变量类型是唯一的,需要先指定。PHP JavaScript等弱类型语言时,...

网友评论

      本文标题:C语言变量类型

      本文链接:https://www.haomeiwen.com/subject/osvphttx.html