c 变量的存储类型auto等(基础知识)和c函数变量

总结

1).在c语言中每一个变量和函数有两个属性:数据类型和数据的存储类别。

2). 对数据型(如整型、字符型等)。存储类别指的是数据在内存中存储的方式。

存储方式分为两大类:

静态存储类和动态存储类

具体包括四种:{自动的(auto), 静态的(static), 寄存器(register), 外部的(extern)}。 根据变量的存储类别, 可以知道变量的作用域和生存期。

例如:

局部变量:

自动变量: int main(void){int a, b, c; 自动变量}

静态局部变量: int main(void){static int a, b, c; }  离开函数, 值仍保留

寄存器变量:int main(void){register int a, b, c; } 

--------------------------

全局变量:

静态外部变量: static int A;

外部变量: int A ;

注意: 

静态存储是放在data段, 而动态存储是放在栈里面的

--------------------------------------------

auto变量

函数中的局部变量, 如不专门声明为static存储类别, 都是动态地分配存储空间的(栈), 数据存储在动态存储区中

函数中的形参和函数中定义的变量(包括符合语句中的变量), 都属于类, 调用该函数时系统

会给他们分配存储空间, 在函数结束时, 就会自动释放这些存储空间

默认可以不写auto

static声明局部变量

函数中的局部变量的值在函数调用结束后不消失而保留原值, 即其占用的存储单元不释放,

在下一次该函数调用时, 该变量已有值, 就是上一次函数调用结束时的值。

用static进行声明

#include<stdio.h>

int f(int a)
{
      auto int b=0;
      static int c=3;

       b = b+1;   // b== 1, 1, 1
       c = c+1; // c==4, 5, 6
       return (a+b+c)
}

void main()
{
        int a=2, i;
        for(i=0;i<3;i++)
        {
            printf("%d\n", f(a));
        }
}

栈有个特点:

调用的时候会生成一个栈,用完回收。

而静态则不会释放, 对静态局部变量是在编译时赋初始值, 即只赋初值一次, 在程序运行时他已有值。

register变量

如果有一些变量使用频繁(例如一个函数循环中,每次循环都要引用某局部变量, 则为存取变量的值要花费不少时间)。

为提高执行效率, c语言允许将局部变量的值放在cpu中的寄存器中, 需要用时直接从

寄存器中参加运算, 不必再到内存中去存取。

#include<stdio.h>
int fac(int n)
{
    register int i, f=1;
    for(i=1; i<=n; i++)
    {
            f *= 1;
    }
    return (f);
}
void main()
{
        int i;
        for (i=1;i<=15;i++)
        {
            printf("%d! = %d\n", i fac(i))
        }
}

extern 声明外部变量(全局)

外部变量即全局变量, 它的作用域是从变量的定义处开始,到本程序文件的末尾。

在此作用域内, 全局变量可以为程序中的各个函数所引用。编译时将外部变量分配在

静态存储区。

有时需要用extern来声明外部变量, 以扩展外部变量的作用域。

#include <stdio.h>

int max(int x, int y)
{
    int z;
    z = x > y ? x : y;
    return (z);
}

int main(void)
{
    extern A, B;
    printf("%d\n", max(A, b));
}

int A = 13, B = -8;

函数变量

1.c

#include <stdio.h>

int A;    /×定义外部变量×/  --- 创建存储空间

int main(void)
{
     int power(int );      /× 函数声明×/
}

2.c

extern  A;  /×声明A为一个已定义的外部变量×/  --注意这里不建立存储空间,成为引用性声明

int power(int n)
{
。。。。。
}

用static声明外部变量--本文件使用

需求:

有时在程序设计中希望某些外部变量只限于被本文件引用, 而不能被其他文件引用。这时可以在

定义外部变量时加一个static声明。

# include<stdio.h>

static int A;  /*这里定义声明为static, 不让别的文件引用*/

int main(void)
{
....
}

那么下面这个extern A就拿不动A的值,可以理解为私有_A

extern  A;  /×声明A为一个已定义的外部变量×/

int power(int n)
{
。。。。。
}

关于变量的声明和定义

对变量而言, 声明和定义的关系稍微复杂一些。在声明部分出现的变量有两种情况:一种是需要

建立存储空间的(如: int a;)另一种是不需要建立存储空间的(如:extern a;)

前者是定义性声明, 简称定义, 后者成为引用性声明。

时间: 2024-10-24 06:36:23

c 变量的存储类型auto等(基础知识)和c函数变量的相关文章

C语言中变量的存储类型

在C语言中,对变量的存储类型说明有以下四种: auto 自动变量register   寄存器变量extern 外部变量static   静态变量 自动变量和寄存器变量属于动态存储方式,外部变量和静态变量属于静态存储方式. 在介绍了变量的存储类型之后,可以知道对一个变量的说明不仅应说明其数据类型,还应说明其存储类型. 因此变量说明的完整形式应为:存储类型说明符数据类型说明符变量名,变量名-:例如: static int a,b;      说明a,b为静态类型变量 auto char c1,c2;

js基础知识总结:函数

函数内部的属性: arguments 和this是函数内部的两个特殊对象 arguments: function recursion(num){ if(num<=1){ return 1; }else{ return num*recursion(num-1); } } 另一种写法: function recursion(num){ if(num<=1){ return 1; }else{ return num*arguments.callee(num-1); } } arguments:表示当

C++基础知识(二)—— 变量和数据类型

你可能觉得这个"Hellow World"程序用处不大.我们写了好几行代码,编译,然后执行生成的程序只是为了在屏幕上看到一句话.的确,我们直接在屏幕上打出这句话会更快.但是编程并不仅限于在屏幕上打出文字这么简单的工作.为了能够进一步写出可以执行更有用的任务的程序,我们需要引入变量(variable)这个的概念. 让我们设想这样一个例子,我要求你在脑子里记住5这个数字,然后再记住2这个数字.你已经存储了两个数值在你的记忆里.现在我要求你在我说的第一个数值上加1,你应该保留6 (即5+1)

PHP基础知识:语法、变量与数据类型

1.PHP语法 PHP 脚本以 <?php 开始,以 ?> 结束,每个代码行都必须以分号结束. PHP 文件通常包含 HTML 标签和一些 PHP 脚本代码,默认文件扩展名是".php". 将PHP文件保存在项目文件夹下,在浏览器的地址栏中输入"localhost/项目文件夹名/PHP文件名"即可执行. 在PHP中有两个基本输出方式:echo和print.两者区别在于:echo可以输出一个或多个字符串,没有返回值:而print只允许输出一个字符串,返回值

JavaSE基础知识(2)—变量和运算符(2.2数据类型)

一.常见的数据类型 int:用于保存整型的double:用于保存浮点型的char:用于保存单个字符,要求字符值必须用单引号引起来String:用于保存字符串,要求字符串值必须用双引号引起来 二.数据类型的分类 ★ 三.基本数据类型详细介绍 一)整型   名称 所占字节空间 数值范围 byte 字节整型 1个字节 -27~27-1 short 短整型 2个字节 -215~215-1 int 整型 4个字节 -231~231-1 long 长整型 8个字节 -263~263-1 特点: 1.编译器默

黑马程序员-java基础知识+环境搭建和变量配置

一.dos命令 软件:是一系列按照特定顺序组织的计算机数据和指令的集合. 交互方式:图形化界面.命令行方式 dir  directory 显示文件和子目录 cd   change directory 改变当前的路径(进入指定目录) md   make directory 新建一个子目录(文件夹) rd   remove directory 删除一个子目录(文件夹) cd.. 返回上一文件夹 cd/  返回根目录(磁盘) del  delete 删除文件 (不走回收站)   del *.txt(删

C++基础知识---static const成员变量的初始化

为了将常量的作用域限制于class内,你必须让让成为class的一个成员:而为确保此常量之多只有一份实体,你必须让让成为一个static成员: Class Gameplayer { Private: Staticconst int Number = 5;  //常量声明式 Intscores[Number];  //使用该常量 }: 然而你所看到的是Number的声明式而非定义式.通常C++要求你对你所使用的任何东西提供一个定义式,但如果他是个class专属常量又是static且为整数类型,则需

js最基础知识回顾6(变量,预解析,引用,索引)

一.变量 1. 作用域:全局.局部.闭包 2. var a=12;   不加var,会变成全局变量. 3. 全局变量:容易重名,影响性能 4. 局部变量和全局变量重名,局部会屏蔽全局. 5. 给window加东西,是全局的.用途:把封闭空间的东西,变成全局. (function(){ window.a=12; alert(a); })() 二.预解析 1. 系统会把所有变量的声明,放在最上面.只是声明到上面,赋值还在原来的位置. 2. 预解析的作用域:不会脱离原本的作用域.函数中,变量放在函数最

TestStand 基础知识[1]--参数和变量

TestStand 参数和变量 英文的定义如下: 简单可以理解为:在测试和序列中用于共享数据,且有4种实现方式:Parameters.Local Variables.Global Variables.Station Global Variables 下面分别介绍一下它们简单的使用方式: Parameters 简单来说是用作sequence之间共享数据 (1)可以是同一个SequenceFile中,Sequence和SubSequence之间共享数据 (2)也可以是不同SequenceFile之间