LR静态存储/动态存储/指针变量脚本说明

在一次教程学习中,看到该知识点并记录了下来,希望与大家共同探讨学习。

一、静态存储与动态存储

  静态存储变量通常是在变量定义时就分定存储单元并一直保持不变, 直至整个程序结束。动态存储变量是在程序执行过程中,使用它时才分配存储单元,使用完毕立即释放。动态存储变量最典型的例子是函教的形式参数,在函数定义时并不给形参分配存储单元,只是在函数被调用时,才予以分配,调用函数完毕立即释放,如果一个函数被多次调用 ,则反复地分配和释放形参变量的存储单元。

  从以上分析可知,静态存储变量是一直存在的 ,而动态存储变是则时而存在时而消失。 我们又把这种由于变量存储方式不同而产生的特性称变量的生存期。( 见以下脚本 )

 1 Action()
 2 {
 3
 4     int i;
 5
 6        //执行函数auto_static 5次
 7     for (i=0;i<5;i++) {
 8         auto_static();
 9     }
10
11
12     return 0;
13 }
14
15
16 //静态动态变量测试函数
17     void auto_static(void)
18     {
19         int var_auto=0;          //动态变量,每次调用都重新初始化
20         static int var_static=0; //静态局部变量:只初始化1次
21         lr_output_message("var_auto=%d,var_static=%d\n",var_auto,var_static); //输出两个变量的值
22         var_auto++;
23         var_static++;
24     }

大家可以想想,两个变量输出的都是什么值:

1 Action.c(38): var_auto=0,var_static=0
2 Action.c(38): var_auto=0,var_static=1
3 Action.c(38): var_auto=0,var_static=2
4 Action.c(38): var_auto=0,var_static=3
5 Action.c(38): var_auto=0,var_static=4

二、指针

  指针是一个存储计算机内存地址的变量。从指针指向的内存读取数据称作指针的取值。指针可以指向某些具体类型的变量地址,例如int、 long 和double。

  根据出现的位置不同,操作符 * 既可以用来声明一个指针变量,也可以用作指针的取值。当用在声明一个变量时,表示这里声明了一个指针。其它情况用到 * 表示指针的歌值。

  & 是地址操作符,用来引用一个内存地址。通过在变量名字前使用&操作符,我们可以得到该变量量的内存地址。(见以下解本)

 1 Action()
 2 {
 3
 4 //将var1值赋给变量deref
 5     int *ptr;      //生命一个int类型的指针变量
 6     int deref;
 7     int var1 = 35; //定义变量并复制,此时会分配存储单位,有存储地址
 8     int var = 99;
 9
10     ptr = &var;    //ptr指向变量var的内存地址,但不可以把数值赋给指针变量
11     deref = *ptr;  //对指针进行取值,打印存储在指针地址中的内容
12     lr_output_message("var is %d",deref);
13
14
15     return 0;
16 }

输出的值为: var is 99

原文地址:https://www.cnblogs.com/zwh-Seeking/p/12030642.html

时间: 2024-11-29 20:56:18

LR静态存储/动态存储/指针变量脚本说明的相关文章

深入浅出理解局部、全局、静态、动态、外部变量

1.全部变量.局部变量 局部变量:定义在函数内部的变量,作用域为函数内部         eg: void fun(){ int x;} 全部变量:只能定义一次,多次引用.作用域为整个文件. 若同一个源文件,全局变量和局部变量重名是,在局部变量的作用域,全部变量不起作用. 关键词: 全部变量:函数外定义+全局可见+存放在内存的全局数据区+未初始化的的时候为0 局部变量:函数内定义+函数内可见+存放在栈区,函数退出变量消失+不显式初始化内容不可预知 2.静态存储变量.动态存储变量 静态存储变量:程

指针变量作为函数参数(1)

普通函数参数 下面程序试图改变main函数中a和b的值 #include<stdio.h> void fun(int x,int y) { int c; c=a; a=b; b=c; } int main() { int a=1,b=2; fun(a,b); printf("a=%d b=%d\n",a,b); return 0; } 函数参数传递分析: 实参: &a 28ff18 a  1 &b 28ff14 b  2 在将实参传递给形参的时候,编译器将实

C++中的自动存储、静态存储和动态存储

根据用于分配内存的方法,C++中有3中管理数据内存的方式:自动存储.静态存储和动态存储(有时也叫做自由存储空间或堆).在存在是间的长短方面,以这三种方式分配的数据对象各不相同.下面简要介绍这三种类型(注:C++11中新增了第四种类型——线程存储)1.自动存储在函数内部定义的常规变量使用自动存储空间,被称为自动变量(automatic variable),这意味着它们在所属的函数被调用时自动产生,在该函数结束时消亡.例如,挡在一个自定义的函数getname()中定义了一个temp数组时,temp数

堆/栈/动态存储方式/静态存储方式

动态存储方式 所谓动态存储方式是指在程序运行期间根据需要进行动态的分配存储空间的方式.动态存储变量是在程序执行过程中,使用它时才分配存储单元, 使用完毕立即释放. 典型的例子是函数的形式参数,在函数定义时并不给形参分配存储单元,只是在函数被调用时,才予以分配, 调用函数完毕立即释放.如果一个函数被多次调用,则反复地分配. 释放形参变量的存储单元. 静态存储方式 所谓静态存储方式是指在程序编译期间分配固定的存储空间的方式.该存储方式通常是在变量定义时就分定存储单元并一直保持不变, 直至整个程序结束

动态存储和静态存储区域区别

动态存储方式 所谓动态存储方式是指在程序运行期间根据需要进行动态的分配存储空间的方式.动态存储变量是在程序执行过程中,使用它时才分配存储单元, 使用完毕立即释放. 典型的例子是函数的形式参数,在函数定义时并不给形参分配存储单元,只是在函数被调用时,才予以分配, 调用函数完毕立即释放.如果一个函数被多次调用,则反复地分配. 释放形参变量的存储单元. 静态存储方式 所谓静态存储方式是指在程序编译期间分配固定的存储空间的方式.该存储方式通常是在变量定义时就分定存储单元并一直保持不变, 直至整个程序结束

[转]C++中的自动存储、静态存储和动态存储

根据用于分配内存的方法,C++中有3中管理数据内存的方式:自动存储.静态存储和动态存储(有时也叫做自由存储空间或堆).在存在是间的长短方面,以这三种方式分配的数据对象各不相同.下面简要介绍这三种类型(注:C++11中新增了第四种类型--线程存储) 1.自动存储 在函数内部定义的常规变量使用自动存储空间,被称为自动变量(automatic variable),这意味着它们在所属的函数被调用时自动产生,在该函数结束时消亡.例如,挡在一个自定义的函数getname()中定义了一个temp数组时,tem

C++中的数据存储方式自动存储、静态存储和动态存储

C++中变量存储方式有三种,自动存储,静态存储,动态存储 自动存储简单意义上就是在函数内不用任何关键字直接定义的变量,它在函数被调用时被创建,在函数退出时自动消失, 静态存储顾名思义就是在程序的整个运行过程中都存在,在函数体外定义的变量自动为静态存储方式,也可以在函数内使用static关键字定义 动态存储是以关键字new和delete构成的,在程序运行过程中需要时通过new现场分配指定大小的空间,不再需要时使用delete来释放

指针和动态存储分配

1 指针 指针是C语言的基本概念,每种数据类型都有相应的指针类型.指针类型变量存放的值实际上就是内存地址.指针的最基本操作: & 取地址 * 去引用(间接引用) 如: int i, *pi              //其中 i 是整型变量,pi 是指向整数的指针. pi = &i ;             //则 &i 返回i的地址并把它赋值给 pi ,若要给 i 赋值,可以写成 i = 10 ; 或者 *pi = 10 ; pi 之前的 * 是去引用 , 10 并未存放指针里

【Xcode学C-4】进制知识、位运算符、变量存储细节以及指针的知识点介绍

一.进制知识 (1)默认是十进制.八进制前面加0.即int num1=015;是13.十六进制前面加0x/0X.即int num1=0xd.结果是13.二进制前面是0b/0B,即int num1=0b1101,结果是13. (2)输出能够是八进制.十进制.十六进制输出.各自是%o.%d.%x,但没有二进制格式直接输出. (3)3位二进制位是0~7,三个3位二进制位就相当于八进制数据.如000001101(二进制的13),我们划分成三个一组000 001 101,再分别换算成十进制的就是0 1 5