变量数据存储,存储过程的变量指什么
一、程序的局部变量 全局变量 动态申请数据分别存储在什么地方
程序的局部变量全局变量动态申请数据分别存储在什么地方?
量的类别:
根据作用域可分为全局变量和局部变量。
根据生存周期可分为静态存储方式和动态存储方式,具体地又分为自动的(auto)、静态的(static)、寄存器的(register)、外部的(extern)。
静态存储方式是指在程序运行期间分配固定的存储空间的方式,动态存储方式是在程序运行期间根据需要进行动态的分配存储空间的方式。
每一个变量均有作用域和存储类别两个属性,这些属性共同用于描述一个变量,这些不同类型的变量与存储位置的关系如下:
外部变量(全局变量)、静态外部变量、静态局部变量存储在静态存储区。
自动局部变量(局部变量默认为自动局部变量)、函数形参存储在动态存储区,不论是静态存储区还是动态存储区均属于内存中的用户区。
但是,寄存器变量是存储在CPU寄存器中的而不是内存中。
首先说明一下与作用域相关的几个属性:
局部变量:在一个函数内部定义的变量是内部变量,它只在本函数范围内有效,也就是说只有在本函数内才能使用它们,在此函数以外是不能使用这些变量的,这种类型的变量就称为“局部变量”。
全局变量:在函数外定义的变量,可以为本源文件中其它函数所公用,有效范围为从定义变量的位置开始到本源文件结束,这种类型的变量就称为“全局变量”。
接下来说明一下与存储类型相关的几个属性:
atuo:在声明局部变量时,若不指定 static,默认均是 auto,这类变量都是动态分配存储空间的,数据存储在动态存储区中。
static:在声明局部变量时,使用关键字 static将局部变量指定为“静态局部变量”,这样在函数调用结束后不消失而保留原值,即占用的存储单元不释放,在下一次函数调用时,该变量已有值就是上次函数调用结束时的值。
register:在声明动态局部变量或者函数形参时,可将变量声明为register,这样编译系统就会为变量分配一个寄存器而不是内存空间,通过这种方式可提升对某些局部变量频繁调用的程序的性能。(寄存器运算速度远高于内存)
extern:用于扩展全局变量的作用域,比如如果函数想引用一个外部变量,但该外部变量在该函数后定义,那么这个函数需要使用 extern来声明变量,这样才能使用在该函数后面定义的全局变量。此外,extern还可以在多文件的程序中声明外部变量。
由于变量从不同维度划分,形成了多种错综复杂的关系,在学习编程的时候需要重点关注。
二、变量名与数据内容的存储关系
char数据类型是占一字节,所以:sizeof(a)= 1个字节
保存数据的内存地址(对于 32为系统)是32位,即 4字节,所以:sizeof(&a)= 4个字节
变量名存储的地址,是在栈中。
知道数据内容和变量名是分开存储:
最好顺便将堆、栈的概念弄清楚,举个例子,如:
仓库,可以分为管理区和储存区,当然,管理区可以存放标识货物保存在储存区位置的标识牌,也可以保存货物。
char a;,相当于在管理区(栈)中的一个位置吧保存了一件货物,&a相当于获取这件货物在管理区的位置(内存地址)。当然,管理区也要编号。
char*pa相当于在管理区(栈)申请一个位置,用于存放货物指示牌,pa= new char[100],new char[100]相当于在货物储存区(栈)申请了一块区域,pa= new char[100],相当于在指示牌 pa上标明这个货物储存区的位置。
栈(内存)是静态的,编程时就确定,当然内存释放不用人工干预。堆(内存)是动态的,在程序执行是由你写的代码申请的,当然内存释放由你决定。
三、存储过程的变量指什么
存储过程是面向对象的数据库编程语言,与其他面向对象编程语言类似,可声明变量,用变量来存取某一类值,变量在存储过程中占有非常重要的位置。变量声明在MySQL语言的存储过程中,变量有会话变量、存储过程变量两种。两种变量的声明方式不同,作用场景也不尽相同,在实际使用中要根据需要加以选择。
1.变量种类((1)会话变量会话变量也称用户变量,可以在一个客户端会话的任何地方声明,作用域是整个会话,会话断开后,会话变量也就消失。会话变量名以@开头,使用set直接赋值,在一个会话内,会话变量只需初始化一次。
例如,Set@num=1;表示声明了一个名字叫“@num”的会话变量,其初始值为1。
(2)存储过程变量存储过程变量以DECLARE为关键字声明的变量,只能在存储过程中使用,其命名不需要以@开头。以DECLARE声明的变量都会被初始化为NULL,存储过程变量存在于数据库服务器上。2.变量定义存储过程变量定义格式:DECLARE+变量名+数据类型+[DEFAULTVALUE]其中,((1)DECLARE为声明存储过程变量的关键字;
(2)变量名可以任意,但尽可能达到能表意的目的;
(3)数据类型为MySQL的数据类型,如int
四、c语言变量如何存储在内存中
在系统为一个程序分配的空间中,分成许多段,比如有代码段,存放程序可执行代码,有数据段,可以分配变量,有常量段,专门存放常量,是只读的。常量变量可以位于数据段中,仍然是变量,只是程序没有改动权限。在程序执行到main之前,系统负责将常量区存储的常量赋值给常量。