当前位置:文档之家› 变量就是内存空间

变量就是内存空间

变量就是内存空间
变量就是内存空间

变量就是内存空间

我们刚才讲了变量,变量就是一块内存空间,那他只是一个内存空间而已,那这个空间到底占多大呢?对不对?好了,那我们就需要回到现实世界了,实际上在现实世界里面,他的数据的类型是很多很多种的。比如我们在游戏里面,攻击力啊经验值啊,还可以跟别人一起聊天啊,还有称号。大家发现这些东西的话,有英文啊有中文啊,有小数啊有整数啊,我们把这些数据一旦分类以后,这些数据可以大体分为两类数。一类是数值的数据,一类是非数值的数据。是不是啊,那我们如果再细分呢?再细分就变成了整形数据和非整形数据,那非数值数据再细分的话呢,一样也有很多。所以我们知道了这些事情了之后,我们发现数据的类型在c语言里面,整形里面一共有3个。这三个数据我们称他为整型数据,我们最常用的就是int。Int数据就是我们的常用的整型数据,非整形里面有两种,一种叫float一种叫double。Float叫做单精度浮点型,double叫做双精度浮点型。这两个数据类型也非常重要,整型数据一般用来表示整数。Float和double的区别呢,就是float的一个精度和位数要比double 小一些。所以我们一般用的时候,double要用的比较多一些。下面就是非整形数据类型,如果有同学学过c语言以外的语言,大家知道用的最多的是字符串型。但是很可惜,在我们的c语言里面,我们刚开始学习的时候暂时不会接触字符串类型,那怎么办呢,只有字符类型。那我们要操作字符串怎么办呢?要操作字符串呢没办法,我们只能操作字符数组,我们学习了字符数组了之后呢,也可以加深我们队字符串的理解。要是直接学字符串呢,他已经封装了很多字符数组的操作方法,如果大家今天第一次学习这种东西,就当我没说好吧。我们不着急。

紧接着,我们最枯燥的来了啊,我们稍微给大家讲一下,提一下就可以了。怎么说呢,当年我们老师在大学里面学这个东西,说实话我看到这东西都头晕,所以这里呢我希望大家今天我在讲课的时候,大家最重要的是看我的推导过程。而不要看后面的取值范围,取值范围呢我们到时候百度一下就ok了,面试的时候也不会有人问你什么整形的取值范围是多少啊,就算你会背了也没什么特别有用的,那么整形的话呢他的一个英文单词,或者说类型说明符是int型的。默认的位数是32位,要注意了啊各位,如果大家下载了编程软件,编程工具是toolbc,好多大学里面用的就是这个。古老的编译器的话,这里的位数有可能是16位,所以这个位数到底是什么东西,大概的给大家讲解一下什么是位数。因为很多同学在上课之前是没有学过二进制的对不对,什么是位数呢?位数呢就是二进制,8个1就是8个二进制。所谓整形,他的位数是32位是什么意思啊,32位意味着有4串这样的二进制。那一串是8位,8位用单位来表示,就是8 bit。那8 bit(比特)实际上是多少字节呢?就是1 byte(字节)。那大家看如果一个整形如果占32位的话,他是占了几个字节呢?很明显是占了4个字节。所以很多时候我们在程序上真正的表示一个整形,如果全是1的话就是最大值喽,如果全是0的话就是最小值喽。我们先不看那么多的1。我们来看二进制转10进制,转之前我给大家先讲一下二进制的加法,1+1=?对于2进制来讲1+1 = 10 2进制就是逢2进1,十进制就是逢十进一,大家仔细想想十进制是没有十以后的数字了吧。因为10这个数字是由1和0组成的,那同样的12进制就没有12,8进制就没有8.所以我们要把2进制转化成10进制的话。怎么样最简单呢,我们就把这个8个1加1再减1,不知道大家有没有听懂哦,这个地方,还是比较绕的。我们看11111111 + 1 -1 ,因为我加1减1 的话,他最终的结果是不会变的。那么1+1等于几呢,进一位等于0,对不对,0然后进1,然后1+1又是0 了,所以8个1+1以后呢,相当于1后面有几个0 了?当然是8个0了,所以就等于2的8次方。就等于2的8次方减1,就等于256-1,等于255。所以32位二进制的最大值就是255,如果有符号呢,如果有符号就把第一位当作符号位,1就是负的,0就是正的。如果是这样的话后面下上7个1,如果是7个1的话呢就是-127.这个地方有点困难哦,大家只需要记住

推导过程是怎样的就可以了,那如果是32位的话就意味着,就是4个字节,那4个字节的话那就是2的32次方-1.这里说一下,知道和不知道都没关系。

C C++语言变量声明内存分配

C/C++语言变量声明内存分配 2010-11-08 07:10:20| 分类:编程|字号订阅 一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)—程序运行时由编译器自动分配,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。程序结束时由编译器自动释放。 2、堆区(heap)—在内存开辟另一块存储区域。一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。 3、全局区(静态区)(static)—编译器编译时即分配内存。全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。- 程序结束后由系统释放 4、文字常量区—常量字符串就是放在这里的。程序结束后由系统释放 5、程序代码区—存放函数体的二进制代码。 例子程序 这是一个前辈写的,非常详细 //main.cpp int a = 0; 全局初始化区 char *p1; 全局未初始化区 main() { int b;// 栈 char s[] = "abc"; //栈 char *p2; //栈 char *p3 = "123456"; //"123456/0"在常量区,p3在栈上。 static int c =0;//全局(静态)初始化区 p1 = (char *)malloc(10); p2 = (char *)malloc(20); //分配得来得10和20字节的区域就在堆区。

strcpy(p1, "123456"); //123456/0放在常量区,编译器可能会将它与p3所指向的"123456" 优化成一个地方。 } =============== C语言程序的内存分配方式 1.内存分配方式 内存分配方式有三种: [1]从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。 [2]在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。 [3]从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存。动态内存的生存期由程序员决定,使用非常灵活,但如果在堆上分配了空间,就有责任回收它,否则运行的程序会出现内存泄漏,频繁地分配和释放不同大小的堆空间将会产生堆内碎块。 2.程序的内存空间 一个程序将操作系统分配给其运行的内存块分为4个区域,如下图所示。 一个由C/C++编译的程序占用的内存分为以下几个部分, 1、栈区(stack)—由编译器自动分配释放,存放为运行函数而分配的局部变量、函数参数、返回数据、返回地址等。其操作方式类似于数据结构中的栈。 2、堆区(heap)—一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。分配方式类似于链表。 3、全局区(静态区)(static)—存放全局变量、静态数据、常量。程序结束后由系统释放。 4、文字常量区—常量字符串就是放在这里的。程序结束后由系统释放。 5、程序代码区—存放函数体(类成员函数和全局函数)的二进制代码。 下面给出例子程序, int a = 0; //全局初始化区 char *p1; //全局未初始化区 int main() { int b; //栈 char s[] = "abc"; //栈 char *p2; //栈 char *p3 = "123456"; //123456在常量区,p3在栈上。 static int c =0;//全局(静态)初始化区 p1 = new char[10]; p2 = new char[20]; //分配得来得和字节的区域就在堆区。 strcpy(p1, "123456"); //123456放在常量区,编译器可能会将它与p3所指向的"123456"

深入理解C语言变量和内存

深入理解C语言变量和内存 1、基本数据类型变量名和内存的关系: int i; scanf_s("%d", &i); int i;,在这一句就为i分配了内存(但尚未对这块内存进行初始化),所以可以通过&i直接使用这块内存。赋值就更不用说啦,i = 3;。 变量名i,是为方便编程人员使用,是这块内存的别名,指代到块内存,对编程人员i代表这块内存中存储的值(实际上是i指到这个内存,然后取值)。通常我们都是通过变量名来使用已知的内存的。 i代表取(这块内存中存储的)值,而&i代表取(这块内存的)址。程序本身是不为i这个变量名分配空间的。在最终的机器代码中,是不会出现变量名的,这一点在分析反汇编语言时可以看出(命令:dumpbin /disasm xx.obj >xx_disasm.asm 可以查看反汇编语言)。那么编译器是如何处理变量名的呢,变量名会存储在符号表中,并将符号表中的索引对应到实际物理空间(地址)上去,当调用这个变量时,查找符号表就可以找到对应的地址并取值了。 2、不同类型变量的变量名和内存间的关系: 上面分析的是基本数据类型(如int、char等)的变量名。C中除了变量名之外,还有函数名、常量名、指针名、数组名、结构名等。和变量名不同,这些标识符都是直接对应着地址的。基本数据类型的变量,和地址的对应关系需要取址符&才能得到地址,而其余的这些,名字本身就对应着地址。 例如char *pc = “se”;,就是将字符串常量”se”的首地址(位于常量存储区)赋值给了字符指针pc。这也就解释了为什么不需要为pc分配地址就可以为其赋值,而不会遇到类似下面代码所带来的野指针问题: int *pi; *pi = 1; int *pi句,是为pi分配空间,而不是开辟pi所指向的空间。 2.1 C语言中的常量: C对常量是怎么处理的呢?比如上面的i = 3;中的常量3,存储常量3的地址并不是随机分配的,是在程序中的数据段中(.data?这个我也还不是很确定,希望知道的前辈们给个指导),也就是程序本身并不为3分配内存,而是直接写入指令。3是数字常量,对于字符常量和字符串常量,又分别是怎么处理的呢? 字符常量和数字常量是一样的处理方式,都是类似汇编中的立即数,直接写入指令;

4.实例变量和类变量内存分配

实例变量和类变量内存分配 Java向程序员许下一个承诺:无需关心内存回收,java提供了优秀的垃圾回收机制来回收已经分配的内存。大部分开发者肆无忌惮的挥霍着java程序的内存分配,从而造成java程序的运行效率低下! java内存管理分为两方面: 1,内存的分配:指创建java对象时,jvm为该对象在堆内存中所分配的内存空间。 2,内存的回收:指当该java对象失去引用,变成垃圾时,jvm的垃圾回收机制自动清理该对象,并回收该对象占用的内存。 jvm的垃圾回收机制由一条后台线程完成。不断分配内存使得系统中内存减少,从而降低程序运行性能。大量分配内存的回收使得垃圾回收负担加重,降低程序运行性能。 一,实例变量和类变量(静态变量) java程序的变量大体可分为成员变量和局部变量。 其中局部变量有3类:形参、方法内的局部变量、代码块内的局部变量。 局部变量被存储在方法的栈内存中,生存周期随方法或代码块的结束而消亡。 在类内定义的变量被称为成员变量。没使用static修饰的称为成员变量,用static修饰的称为静态变量或类变量。 1.1实例变量和类变量的属性 在同一个jvm中,每个类只对应一个Class对象,但每个类可以创建多个java对象。 【其实类也是一个对象,所有类都是Class实例,每个类初始化后,系统都会为该类创建一个对应的Class实例,程序可以通过反射来获取某个类所对应的Class实例(Person.class 或Class.forName(“Person”))】 因此同一个jvm中的一个类的类变量只需要一块内存空间;但对实例变量而言,该类每创建一次实例,就需要为该实例变量分配一块内存空间。 非静态函数需要通过对象调用,静态函数既可以通过类名调用,也可以通过对象调用,其实用对象调用静态函数,底层还是用类名调用来实现的! 1.2实例变量的初始化时机 对实例变量而言,它属于java对象本身,每次创建java对象时都需要为实例变量分配内存空间,并执行初始化。

变量名有两个重要属性数据类型和组织结构数据类型指出属于数据

IDL中的变量类型 变量名有两个重要属性:数据类型和组织结构。数据类型指出属于数据类型中的哪一种。在IDL中有14种基本数据类型。在图表1中将看到每一种数据类型,每个类型创建的变量的字节大小,变量创建方式,数据类型之间强制转换的IDL函数名称。除了数据类型外,一个变量有一个组织结构。有效的组织结构有标量(例如单个数值)、矢量(真正的一维数组)、数组(最高可达8维)和IDL结构(能包含各种数据类型的变量和组织结构,结构中独立的组成部分称为字段)。 数据类型字节数创建变量数据类型函数 字节型 1 Var=0B thisVar=Byte(variab le) 16位有符号整 型2 Var=0 thisVar=Fix(variabl e) 32位有符号长 整型4 Var=0L thisVar=Long(variab le) 64位有符号整 型8 Var=0LL thisVar=Long64(vari able) 16位无符号整 型2 Var=0U thisVar=UInt(variab le) 32位无符号长 4 Var=0UL thisVar=ULong(varia

整型ble) 64位无符号整 型8 Var=0ULL thisVar=Ulong64(var iable) 浮点型 4 Var=0.0 thisVar=Float(varia ble) 双精度浮点型8 Var=0.0D thisVar=Double(vari able) 复数8 Var=Complex(0.0 ,0.0) thisVar=Complex(var iable) 双精度复数16 Var=Dcomplex(0. 0D,0.0D) thisVar=DComplex(va riable) 字符串 0-3276 7 Var=’’或Var=”” thisVar=String(vari able) 指针 4 Var=Ptr_New() None 对象 4 Var=Obj_New() None 表1:IDL中的14种基本数据类型。表中显示了每种数据类型的字节数,创建变量的方法,用语数据类型之间强制转换的IDL函数 数据类型初始化函数产生索引值的函数 字节型BytArr BIndGen 16位有符号整型IntArr IndGen

不同内存空间(data xdata bdata)定义变量注意事项

1、data 区空间小,所以只有频繁用到或对运算速度要求很高的变量才放到 data 区内,比 如 for 循环中的计数值。 2、 data 区内最好放局部变量。 因为局部变量的空间是可以覆盖的(某个函数的局部变量空间在退出该函数是就释放,由别的函数的局部变量覆盖),可以提高内存利用率。当然静态局部变量除外,其内存使用方式与全局变量相同; 3、确保你的程序中没有未调用的函数。 在 Keil C 里遇到未调用函数,编译器就将其认为可能是中断函数。函数里用的局部变量的空间是不释放,也就是同全局变量一样处理。这一点 Keil C 做得很愚蠢,但也没办法。 4、程序中遇到的逻辑标志变量可以定义到 bdata 中,可以大大降低内存占用空间。 在 51 系列芯片中有 16 个字节位寻址区 bdata ,其中可以定义 8*16=128 个逻辑变量。定义方法是:bdata bit LedState;但位类型不能用在数组和结构体中。 5、其他不频繁用到和对运算速度要求不高的变量都放到 xdata 区。 6、如果想节省 data 空间就必须用 large 模式,将未定义内存位置的变量全放到 xdata 区。当然最好对所有变量都要指定内存类型。 7、当使用到指针时,要指定指针指向的内存类型。 在 C51 中未定义指向内存类型的通用指针占用 3 个字节;而指定指向 data 区的指针只 占 1 个字节;指定指向 xdata 区的指针占 2 个字节。如指针 p 是指向 data 区,则应定义 为: char data *p; 。还可指定指针本身的存放内存类型,如: char data * xdata p; 。其含义是指针 p 指向 data 区变量,而其本身存放在 xdata 区。 单片机初学者一般对c51语言里的DATA ,XDATA ,BDATA,IDATA,CODE,不是很清楚,因为在微机的c语言里根本没有这些东西,一下子出来难以让人接受,特别是没有硬件基本的朋友们.这也是写程序的时候经常犯错误的地方。请看下表

变量就是内存空间

变量就是内存空间 我们刚才讲了变量,变量就是一块内存空间,那他只是一个内存空间而已,那这个空间到底占多大呢?对不对?好了,那我们就需要回到现实世界了,实际上在现实世界里面,他的数据的类型是很多很多种的。比如我们在游戏里面,攻击力啊经验值啊,还可以跟别人一起聊天啊,还有称号。大家发现这些东西的话,有英文啊有中文啊,有小数啊有整数啊,我们把这些数据一旦分类以后,这些数据可以大体分为两类数。一类是数值的数据,一类是非数值的数据。是不是啊,那我们如果再细分呢?再细分就变成了整形数据和非整形数据,那非数值数据再细分的话呢,一样也有很多。所以我们知道了这些事情了之后,我们发现数据的类型在c语言里面,整形里面一共有3个。这三个数据我们称他为整型数据,我们最常用的就是int。Int数据就是我们的常用的整型数据,非整形里面有两种,一种叫float一种叫double。Float叫做单精度浮点型,double叫做双精度浮点型。这两个数据类型也非常重要,整型数据一般用来表示整数。Float和double的区别呢,就是float的一个精度和位数要比double 小一些。所以我们一般用的时候,double要用的比较多一些。下面就是非整形数据类型,如果有同学学过c语言以外的语言,大家知道用的最多的是字符串型。但是很可惜,在我们的c语言里面,我们刚开始学习的时候暂时不会接触字符串类型,那怎么办呢,只有字符类型。那我们要操作字符串怎么办呢?要操作字符串呢没办法,我们只能操作字符数组,我们学习了字符数组了之后呢,也可以加深我们队字符串的理解。要是直接学字符串呢,他已经封装了很多字符数组的操作方法,如果大家今天第一次学习这种东西,就当我没说好吧。我们不着急。 紧接着,我们最枯燥的来了啊,我们稍微给大家讲一下,提一下就可以了。怎么说呢,当年我们老师在大学里面学这个东西,说实话我看到这东西都头晕,所以这里呢我希望大家今天我在讲课的时候,大家最重要的是看我的推导过程。而不要看后面的取值范围,取值范围呢我们到时候百度一下就ok了,面试的时候也不会有人问你什么整形的取值范围是多少啊,就算你会背了也没什么特别有用的,那么整形的话呢他的一个英文单词,或者说类型说明符是int型的。默认的位数是32位,要注意了啊各位,如果大家下载了编程软件,编程工具是toolbc,好多大学里面用的就是这个。古老的编译器的话,这里的位数有可能是16位,所以这个位数到底是什么东西,大概的给大家讲解一下什么是位数。因为很多同学在上课之前是没有学过二进制的对不对,什么是位数呢?位数呢就是二进制,8个1就是8个二进制。所谓整形,他的位数是32位是什么意思啊,32位意味着有4串这样的二进制。那一串是8位,8位用单位来表示,就是8 bit。那8 bit(比特)实际上是多少字节呢?就是1 byte(字节)。那大家看如果一个整形如果占32位的话,他是占了几个字节呢?很明显是占了4个字节。所以很多时候我们在程序上真正的表示一个整形,如果全是1的话就是最大值喽,如果全是0的话就是最小值喽。我们先不看那么多的1。我们来看二进制转10进制,转之前我给大家先讲一下二进制的加法,1+1=?对于2进制来讲1+1 = 10 2进制就是逢2进1,十进制就是逢十进一,大家仔细想想十进制是没有十以后的数字了吧。因为10这个数字是由1和0组成的,那同样的12进制就没有12,8进制就没有8.所以我们要把2进制转化成10进制的话。怎么样最简单呢,我们就把这个8个1加1再减1,不知道大家有没有听懂哦,这个地方,还是比较绕的。我们看11111111 + 1 -1 ,因为我加1减1 的话,他最终的结果是不会变的。那么1+1等于几呢,进一位等于0,对不对,0然后进1,然后1+1又是0 了,所以8个1+1以后呢,相当于1后面有几个0 了?当然是8个0了,所以就等于2的8次方。就等于2的8次方减1,就等于256-1,等于255。所以32位二进制的最大值就是255,如果有符号呢,如果有符号就把第一位当作符号位,1就是负的,0就是正的。如果是这样的话后面下上7个1,如果是7个1的话呢就是-127.这个地方有点困难哦,大家只需要记住

C语言变量的声明和空间的分配

无论用什么语言编制的程序,都是为让计算机完成某一特定功能而编写的文本文件。这些文本文件是不能直接在机器上运行的,它们必须经过系统软件(包括编辑器和编译器)的输入并编译或汇编后,转换成二进制的可执行代码,才是计算机可以识别的机器语言。此时,程序就是一个包含二进制可执行代码文件的模块。当内核把二进制的可执行代码装入内存后,它由三部分组成:代码段、数据段、堆栈段。在线性地址的低地址字段是代码段,存放程序经编译后的可执行代码(程序文本)。在操作系统中,代码段是只读的,不能修改,所以,代码段的长度是不会改变的。在程序文本(代码段)的上方是数据段,用来存放程序的变量、字符串和其它数据。它分为初始化静态数据(data)和未初始化静态数据(BSS。数据段的长 度是可以改变的。程序可以修改其中的变量。在程序设计中,将其值可以改变的量称为变量。每一个变量在内存中都要占据一定的存储单元,因此,每一个变量也就会具有一定的存储属性。 从变量的作用域(空间)的角度来考虑变量的属性,可将变量分为全局变量和局部变量。 局部变量 局部变量是指在一个函数内部定义的变量,它只中本函数范围内有效。 说明: 1、在主函数中定义的变量只在主函数中有效,且主函数也不能使用其他函数中定义的变量 2、在不同函数中可以使用相同名字的变量,它们代表不同的变量,互不干扰; 3、形参也是局部变量,也只在对应的函数中有效,其他函数不能使用 4、在一函数内部,可在复合语句(有一个{} 括起的一组语句)中定义变量,这些变量只在本复合语句中有效。 全局变量 程序的编译单位是源程序文件,一个源文件可以包含一个或若干个函数。在函数之外定义的变量称为外部变量(extern ), 也叫全局变量。全局变量的有效范围是从定义变量的位置开始到本源程序文件结束为止,其关键字extern 可以省略。 说明: 1、在一个函数中既可以使用本函数中的局部变量,又可以使用有效的全局变量。 2、设置全局变量的作用是增加函数间数据联系的渠道。由于同一文件中的若干函数均能引用全局变量

有下面几个内存变量赋值语句

第二章 一、单选题 1. 在Visual FoxPro中,有下面几个内存变量赋值语句: x={~2001-07-28 10:15:20PM} y=.T. m=$123.45 n=123.45 z=“123.45” 执行赋值语句后,内存变量x、y、m、n、和z、的数据类型分别是。 ①.D、L、Y、N、C ②.D、L、M、N、C ③.T、L、M、N、C ④.T、L、Y、N、C 2.以下日期值正确的是。 ①.{″2001-05-25″} ②.{2001-05-25} ③.{[2001-05-25]} ④{2001-05-25} 3.在下面的Visual FoxPro表达式中,不正确的是。 ①.{2001-05-01 10:10:10 AM}-10 ②.{2001-05-01}-DATE() ③.{2001-05-01}+DATE()④.{2001-05-01}+1000 4.在下面的Visual FoxPro表达式中,运算结果为逻辑真值的是。 ①.EMPTY(.NULL.)②.LIKE(”acd”,”ac?”) ③.AT(”a”,123abc”)④.EMPTY(SPACE(2)) 5.设D=5>6,命令?V ARTYPE(D)的输出值是。 ①.L ②.C ③.N ④.D 6.在下列函数中,函数值为数值的是。 ①.BOF()②.CTOD(”01/01/96”) ③.AT(”人民”,”中华人民共和国”)④.SUBSTR(DTOC(DATE()),7) 7.设n=888,m=345,k=”m+n”,表达式1+&k的值是。

①.1234 ②.346 ③.1+m+n ④.数据类型不匹配 8.表达式V AL(SUBS(”奔腾586”,5,1))*LEN(”Visual FoxPro”)的结果是。 ①.63.00 ②.64.00 ③.65.00 ④.66.00 9.连续执行以下命令后,最后一条命令的输出结果是。 SET EXACT OFF X=”A” ?IIF(”A”=x,x-”BCD”,x+”BCD”) ①.A ②.BCD ③.ABCD ④.ABCD 10.连续执行下面命令之后,最后一条命令的输出结果是。 SET EXACT ON x=”A” ?IIF(”A”=x,x-”BCD”,x+”BCD”) ①.A ②.BCD ③.ABCD ④.ABCD 11.在以下4组函数运算中,结果相同的是。 ①.LEFT(”Visual FoxPro”,6)与SUBSTR(”Visual FoxPro”,1,6) ②.YEAR(DATE())与SUBSTR(DTOC(DATE),7,2) ③.V ARTYPE(”36-5*4”)V ARTYPE(36-5*4) ④.假定a=”this ”, b=”is a string”,A-B与A+B 12.使用命令DECLAREmm(2,3)定义的数组,包含的数组元素个数为个。 ①.2 ②.3 ③.5 ④.6 13.在Visual FoxPro表达式中,是不正确的。 ①.{2002-05-01 10:10:10 a}-10 ②.{2002-0501}-DATE() ③.{2002-05-01}+DATE()④.[2002-05-01]+[1000] 14.关于Visual FoxPro数组的叙述,错误的是。 ①.用DIMENSION和DECLARE都可以定义数组 ②.Visual FoxPro只支持一维数组和二维数组

编程中内存分配总结

栈, 临时变量,大小有限制,函数返回后就被回收 堆,可以动态分配,大小可近似认为无限制,可以一直存在 堆:malloc(), free() 需要自己申请与自己负责释放! 适用于事先不知道需要分配多大空间的情况。 栈:void fun(int x){int y; ... }系统帮你分配与释放。 /////////////////////////////////////////////////////////////////// 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)—由编译器自动分配释放,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap)—一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回 收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的 全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另 一块区域。 - 程序结束后由系统释放。 4、文字常量区—常量字符串就是放在这里的。程序结束后由系统释放 5、程序代码区—存放函数体的二进制代码。 ///////////////////////////////////////////////////////////////////// // 我想楼主主要关心的是各种变量的位置和生存周期 1、全局变量,存储在编译文件的数据区,程序启动时初始化,程序退出时回收 2、静态变量,存储在编译文件的数据区,作用域内第一次使用时初始化,程序退出时回收 3、临时变量,存储在栈上,在vc下默认最大为1兆,离开作用域之后就回收。如果在递归的情况下,由于参数参数和变量的使用,达到一定深度就要栈溢出。

属性Property

Delphi属性Property学习应用总结 属性的使用与普通变量非常象,不过也有不同的,属性从某种角度来说,并没有自己的空间,只是一个标识。 通过后面的read来决定,当访问这个属性的时候,得到的是什么结果。 通过后面的write来决定,当设置这个属性的时候,会发生什么事情。 也就是说,你对一个属性a设置一个数字5(a := 5),当你取a的内容时(b := a)时,得到的不一定是5,这个要看具体的实现。 Property是一个很有意思的语法特性,它使得方法具有了字段的调用特征,并赋予字段执行动作的能力。 如果你使用过C++ Builder来写基于VCL的程序,我想很多人都会注意到这样一点,比如:edt.Text = "test"; 这个时候edt文本框的内容会随之改变,但是“理论”上Text应该只是改变了Text所在的内存数据而已,为什么会导致窗口更新界面着一些列动作? 这就是因为Property这一特性,Property是Borland为C++扩展的语法特性,目的在于使C++ Builder能够方便的使用VCL库,毕竟VCL是使用Object Pascal写的。 有些扯远了,言归正传,这里还是总结一下在Delphi中如何使用Poperty这一语法特性。 如果学习过C#的朋友应该会很容易理解,因为C#的属性就是学习自Delphi,毕竟C#和Delphi是同一个设计者。 定义一个属性Property的基本格式如下: property 属性名: 属性值类型read 属性读函数/属性值变量write 属性写函数/属性值变量 这里简单解释一下: 1。Property是属性定义关键字。 2。属性的特征类似于字段,所以属性名就像字段名,属性值类型就像字段的值类型 3。属性读函数,是属性被“读取”时所执行的操作,这样在执行“取值”操作时,具备了执行其他动作的可能。 另外,属性值变量,可以是Property所在类能够访问的任何变量,如果使用了属性值变量,则相当于属性值直接从值变量中获取,这和直接赋值是没有什么差别的 4。属性写函数,是属性被“写入”时所执行的操作,这样在执行属性“赋值”操作时,具备了执行其他动作的可能。比如:写入edt的Text属性时,窗口会同时执行界面更新操作。另外,属性值变量和3中所述类似,如果使用了,就相当于将传来的属性值直接赋值到对应的属性值变量 这里的函数是真正的函数,不像C#中那样的getter和setter,所以会有些难以理解。 5。属性读函数的函数声明: function 读函数名: 属性值类型; 其中读函数名可以自定义,只要和属性声明中一样即可,该函数的返回值就是读属性操作时

变量

KingSCADA 变量-常见问题解答 北京亚控科技发展有限公司 2011年11月

目录 1. KingSCADA支持64位数据吗? (1) 2. 引用变量的数据类型有哪些? (1) 3. 我想删除数据词典里面的某个变量,但删除时提示“由于某些原因无法删除,有可能已被使用”,为什么? (1) 4. 怎样查看KingSCADA与设备之间的通讯状态? (1) 5. 用户能控制KingSCADA运行系统与外部设备的通讯吗? (2) 6. 定义IO变量时,为什么只能看到IOServer的名称,下面定义的链路及设备都看不见? (2) 7. 从IO设备上面采集的是一个32位的整数,想把整数的各个位取出来,在组态王kingview里使用bit()函数,在KingSCADA里怎么实现? (2) 8. KingSCADA里没有类似于组态王kingview的函数ReadTag(),那么我想实现对变量进行单次采集要怎样做? (2) 9. KingSCADA工程的变量点数在哪里查? (2) 10. SCADA工程中,IO变量定义为只写属性时,采集频率不为0,SCADA会不会像组态王一样按照采集频率向下写数据? (3) 11. SCADA工程中,IO变量的采集设置中“强制写”是起什么作用? (3) 12. SCADA工程中,IO变量数据能回写,但是只在启动时读1次,之后就不再变化。新建1个工程,是正常的。 (3) 13. 当前用户和变量安全区一样,但是回写不了数据? (3) 14. KingSCADA有没有类似组态王的数据采集时的动态优化功能? (3) 15. KingSCADA是否具备批量添加变量的功能? (4) 16. KingSCADA的字符串变量最大长度限制是多少? (4) 17. 数据词典导入导出,如果变量的报警标签页里面设置了报警约束,导入后,约束条件就变为空了? (4)

第三章数据类型、变量与常量教案

以课堂讲授为主,用一个产生溢出错误的数学运算式说明数据类型的取值范围;用一个实例说明数值型、布尔型、字符型数据转换规则;用一个未溢出的数学运算式说明类型说明符的使用方法;用一个实例说明Option Explicit语句的作用与意义 数据类型 常量 变量 1、VB应用程序设计的步骤? 2、应用程序界面如何响应用户的操作? 3、属性、事件、方法的如何使用? 软件的定义:程序+数据+文档 数据是程序处理的对象,强调数据的广义性,并不仅仅指数值。比如:姓名、出生日期、身高、成绩、贷款否、照片等数据,它们都需要不同的数据形式存储与运算,所以在计算机内存中存放的形式、占用的存储空间都由数据类型决定的。

第3讲数据类型、变量与常量 一、基本数据类型 数据类型:常用的数据类型—数值、字符、日期、逻辑、变体 1、数值型数据类型(Numeric) 分为整型数和实型数两类 1、整数类型(Integer、Long和Byte) (1)整型(Integer)和长整型(Long) 整形用于保存整数,整数运算速度快,但所表示数的范围小。其中Integer 的取值范围是:-32768~32767,占2个字节,类型符是%号;Long的取值范围是:-2147483648~2147483647,占4个字节,类型符是 & 号。 (2)字节型(Byte) Byte用于存储二进制数,取值范围0~255,占1个字节。 2、实型类型 (1)单精度型(Single) Single用于保存浮点实数,其取值范围是±1.4E-45~±3.4E38,占4个字节,类型符是!号。 (2)双精度型(Double) Double也用于保存浮点实数,但所保存数值的精确度比Single高,其取值范围是: ±4.9E-324~±1.8E308,占8个字节,类型符是 # 号。Double是应用程序中存贮数据的常用类型。 (3)货币型(Currency) Currency型用于存储定点实数或整数,可保留4位整数及15位小数,在所表示的数后会自动增加 @ 符号。 2、逻辑型数据(Boolean) Boolean型只有两个常量:True和False。 说明:

C语言变量声明内存分配

C语言变量声明内存分配(转) 一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)—程序运行时由编译器自动分配,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。程序结束时由编译器自动释放。 2、堆区(heap)—在内存开辟另一块存储区域。一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。 3、全局区(静态区)(static)—编译器编译时即分配内存。全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。- 程序结束后由系统释放 4、文字常量区—常量字符串就是放在这里的。程序结束后由系统释放 5、程序代码区—存放函数体的二进制代码。 例子程序 这是一个前辈写的,非常详细 //main.cpp int a = 0; 全局初始化区 char *p1; 全局未初始化区 main() { int b;// 栈 char s[] = "abc"; //栈 char *p2; //栈 char *p3 = "123456"; //"123456\0"在常量区,p3在栈上。 static int c =0;//全局(静态)初始化区 p1 = (char *)malloc(10); p2 = (char *)malloc(20); //分配得来得10和20字节的区域就在堆区。

strcpy(p1, "123456"); //123456\0放在常量区,编译器可能会将它与p3所指向的"123456"优化成一个地方。 } =============== C语言程序的内存分配方式 1.内存分配方式 内存分配方式有三种: [1]从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。 [2]在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。 [3]从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存。动态内存的生存期由程序员决定,使用非常灵活,但如果在堆上分配了空间,就有责任回收它,否则运行的程序会出现内存泄漏,频繁地分配和释放不同大小的堆空间将会产生堆内碎块。 2.程序的内存空间 一个程序将操作系统分配给其运行的内存块分为4个区域,如下图所示。 一个由C/C++编译的程序占用的内存分为以下几个部分, 1、栈区(stack)—由编译器自动分配释放,存放为运行函数而分配的局部变量、函数参数、返回数据、返回地址等。其操作方式类似于数据结构中的栈。 2、堆区(heap)—一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。分配方式类似于链表。 3、全局区(静态区)(static)—存放全局变量、静态数据、常量。程序结束后由系统释放。 4、文字常量区—常量字符串就是放在这里的。程序结束后由系统释放。 5、程序代码区—存放函数体(类成员函数和全局函数)的二进制代码。 下面给出例子程序, int a = 0; //全局初始化区 char *p1; //全局未初始化区 int main() { int b; //栈 char s[] = "abc"; //栈 char *p2; //栈 char *p3 = "123456"; //123456在常量区,p3在栈上。 static int c =0;//全局(静态)初始化区 p1 = new char[10]; p2 = new char[20]; //分配得来得和字节的区域就在堆区。 strcpy(p1, "123456"); //123456放在常量区,编译器可能会将它与p3所指向的"123456"优化成一个地方。

内存变量的操作

(1) 内存变量的显示 格式:LIST |DISPLAY MEMORY [LIKE<通配符>][TO PRINTER][TO FILE <文件名>] 功能:显示当前已定义的内存变量的有关信息,包括变量名、类型和取值等。 说明:①LIKE选项表示显示与通配符相匹配的内存变量,在<通配符>中允许使用符号?和*,分别代表单个字符和任意多个字符。 ②TO PRINTER或TO FILE<文件名>选项可将内存变量的有 关信息在打印机上打印出来,或者以给定的文件名存入文本文件中(扩展名为.TXT)。 ③LIST MEMORY命令一次显示所有内存变量,如果内存变 量太多,一屏显示不下,则连续向上滚动。而DISPLAY MEMORY 命令分屏显示所有内存变量,如果内存变量太多,显示一屏后暂停,按任意键后可继续显示下一屏。 (2) 内存变量的清除 清除内存变量并释放相应的内存空间,所采用命令有: 格式:①RELEASE <内存变量表>|ALL [LIKE/EXCEPT <通配符>] ②CLEAR MEMORY ③CLEAR ALL 功能:格式①的作用是释放指定的内存变量。选用LIKE短语

是清除与通配符相匹配的内存变量,选用EXCEPT短语是清除与通配符不匹配的内存变量。 格式②的作用是清除所有的内存变量。相当于RELEASE ALL。 格式③的作用是清除所有的内存变量,并关闭所有打开的库文件及相关文件,设置1区为当前工作区。 (3) 内存变量的存储与恢复 由于内存变量是建立在内存中的,一旦退出VFP系统或关机,内存变量便消失了。为了保存内存变量,以备以后再使用,VFP 系统提供了建立和恢复内存变量文件的命令。 ①建立内存变量文件 格式:SAVE TO <内存变量文件名>/TO MEMO<备注字段名> [ALL LIKE/EXCEPT <通配式>] 功能:将内存变量保存到内存变量文件或指定的备注字段中去。系统自动给内存变量文件加上扩展名.MEM。 ②恢复内存变量文件 格式:RESTORE FROM 内存变量文件名/FROM MEMO备注字段名[ADDITIVE] 功能:从指定的内存变量文件或备注字段中,将保存的内存变量恢复到内存中来。若无ADDITIVE选项,则先清除当前内存中的全部内存变量后,再恢复;否则不清除,只将同名的内存变量覆盖。

变量、字段、域、属性、属性过程

C#中的变量、字段、域、属性、属性过程 在C#中: 域:表示与对象或类相关联的变量,修饰符不论是不是public。(与字段类似)字段:表示与对象或类相关联的变量。通常来讲修饰符是public的成员变量称为字段,而private更适合说是局部变量。(与域类似) 属性:表示域或字段的自然扩展,使得在保证封装性的基础上实现了访问私有成员的便捷性。 域 域表示与对象或类相关联的变量,声明格式如下: attributes field-modifiers type variable-declarators; 域的修饰符field-modifiers可以是:new、public、protected、internal、private、static、readonly。实际上,域相当于C++中的简单成员变量。在下面的代码中,类A包含了三个域:公有的X和Y,以及私有的z。 class A { public int x; public string y; private float z; } 字段 字段是与对象或类相关联的变量。 当一个字段声明中含有static修饰符时,由该声明引入的字段为静态字段(static field)。它只标识了一个存储位置。不管创建了多少个类实例,静态字段都只会有一个副本。 当一个字段声明中不含有static修饰符时,由该声明引入的字段为实例字段 (instance field)。类的每个实例都包含了该类的所有实例字段的一个单独副本。 在下面的示例中,Color类的每个实例都有r,g,b实例字段的不同副本,但是Black,White,Red,Green和Blue等静态字段只有一个副本: public class Color { public static readonly Color Black = new Color(0, 0, 0); public static readonly Color White = new Color(255, 255, 255); public static readonly Color Red = new Color(255, 0, 0); public static readonly Color Green = new Color(0, 255, 0); public static readonly Color Blue = new Color(0, 0, 255); private byte r, g, b; public Color(byte r, byte g, byte b) {

C语言变量属性

1.C语言的变量属性 (1)C语言中的变量可以有自己的属性。 (2)在定义变量的时候可以加上“属性”关键字。 (3)“属性”关键字指明变量的特有意义。 语法: property type var_name; 2.auto关键字 (1)auto即C语言中局部变量的默认属性。 (2)auto表明将被修饰的变量存储于栈上。 (3)编译器默认所有的局部变量都是auto的。 3.register关键字 (1)register关键字指明将局部变量存储于存储器中。(2)register只是请求存储器变量,但不一定请求成功。(3)register变量必须是CPU寄存器可以接受的值。(4)不能用&运算符获取register变量的地址。 4.static关键字 (1)static关键字指明变量的“静态”属性 static修饰的局部变量存储在程序静态区。 (2)static关键字同时具有“作用域限定符”的意义

static修饰的全局变量作用域只是声明的文件中。static修饰的函数作用域只是声明的文件中。 例程: #include int f1() { int r = 0; r++; return r; } int f2() { static int r = 0; r++; return r; } int main(void) {

auto int i = 0; static int k = 0; register int j = 0; printf("%p\n", &i); printf("%p\n", &k); // printf("%p\n", &j); for( i = 0; i < 3; i++ ) printf("%d\n", f1()); for( i = 0; i < 3; i++ ) printf("%d\n", f2()); return 0; } 输出: 0x7ffc8a957ca4 0x601048 1 1 1 1 2 3

Visual FoxPro内存变量的属性

内存变量的属性 1、全局变量:是在上下各级程序中都可以使用的内 存变量。用PUBLIC命令来定义。 2、局部变量:只能在创建它们的过程或函数中使用 和更改,不能被上级或下级程序访问。一旦包含局部内存变量和数组的过程或函数执行完毕,则释放这些局部内存变量和数组。(只能在本级程序中使用,本级程序执行完后清除这些变量) 局部内存变量用:LOCAL命令来定义。其初值为.F. 3、私有变量:用PRIV ATE定义的变量,将上级中所用的变量隐藏起来. 实例:&&main1.prg CLEAR public x,y set proc to kk x=20 y=50 ?"第一次:",X,Y do a1 ?"第五次:",x,y set proc to return &&过程文件KK.PRG proc a1 private x x=30 local y Y=9 ?"第二次:",X,Y

do a2 ?"第四次:",x,y return proc a2 x="kkk" y="mmm" ?"第三次:",X,Y return set talk off public val1,val2 val1 = 10 val2 = 15 do down ? val1 ? val2 release all &&只释放私有变量 display memory like val? release val1,val2 &&必须明确地释放公共变量display memory like val? procedure down private val1

val1 = 50 val2 = 100 ? val1 ? val2 return 2.PRIVATE 命令:在当前程序中隐藏指定的、在调用程序中定义的内存变量或数组。 将高层程序中创建的、与私有变量同名的变量隐藏起来,可以在当前程序中操作这些私有变量,而不影响被隐藏变量的值。一旦包含 private 命令的程序执行完毕,所有声明为私有的内存变量和数组就可恢复使用。 PRIVATE 并不创建变量,它只在当前程序中隐藏变量,这些变量是在高层程序中声明的。 示例: set talk off val1 = 10 val2 = 15 do down ? val1, val2 && 显示 10, 100 procedure down private val1 val1 = 50 val2 = 100 ? ' val1 val2' ? val1, val2 && 显示 50, 100

相关主题
文本预览
相关文档 最新文档