在一次教程学习中, 看到该知识点并记录了下来, 希望与大家共同探讨学习.
一, 静态存储与动态存储
静态存储变量通常是在变量定义时就分定存储单元并一直保持不变, 直至整个程序结束. 动态存储变量是在程序执行过程中, 使用它时才分配存储单元, 使用完毕立即释放. 动态存储变量最典型的例子是函教的形式参数, 在函数定义时并不给形参分配存储单元, 只是在函数被调用时, 才予以分配, 调用函数完毕立即释放, 如果一个函数被多次调用 , 则反复地分配和释放形参变量的存储单元.
从以上分析可知, 静态存储变量是一直存在的 , 而动态存储变是则时而存在时而消失. 我们又把这种由于变量存储方式不同而产生的特性称变量的生存期.( 见以下脚本 )
- Action()
- {
- int i;
- // 执行函数 auto_static 5 次
- for (i=0;i<5;i++) {
- auto_static();
- }
- return 0;
- }
- // 静态动态变量测试函数
- void auto_static(void)
- {
- int var_auto=0; // 动态变量, 每次调用都重新初始化
- static int var_static=0; // 静态局部变量: 只初始化 1 次
- lr_output_message("var_auto=%d,var_static=%d\n",var_auto,var_static); // 输出两个变量的值
- var_auto++;
- var_static++;
- }
大家可以想想, 两个变量输出的都是什么值:
- Action.c(38): var_auto=0,var_static=0
- Action.c(38): var_auto=0,var_static=1
- Action.c(38): var_auto=0,var_static=2
- Action.c(38): var_auto=0,var_static=3
- Action.c(38): var_auto=0,var_static=4
- View Code
二, 指针
指针是一个存储计算机内存地址的变量. 从指针指向的内存读取数据称作指针的取值. 指针可以指向某些具体类型的变量地址, 例如 int, long 和 double.
根据出现的位置不同, 操作符 * 既可以用来声明一个指针变量, 也可以用作指针的取值. 当用在声明一个变量时, 表示这里声明了一个指针. 其它情况用到 * 表示指针的歌值.
& 是地址操作符, 用来引用一个内存地址. 通过在变量名字前使用 & 操作符, 我们可以得到该变量量的内存地址.(见以下解本)
- Action()
- {
- // 将 var1 值赋给变量 deref
- int *ptr; // 生命一个 int 类型的指针变量
- int deref;
- int var1 = 35; // 定义变量并复制, 此时会分配存储单位, 有存储地址
- int var = 99;
- ptr = &var; //ptr 指向变量 var 的内存地址, 但不可以把数值赋给指针变量
- deref = *ptr; // 对指针进行取值, 打印存储在指针地址中的内容
- lr_output_message("var is %d",deref);
- return 0;
- }
输出的值为: var is 99
来源: https://www.cnblogs.com/zwh-Seeking/p/12030642.html