20170418

 变量 的两个重要特征:生命周期和作用域
 决定什么时候以及在什么地方可以使用某个变量。
 作用域:
 1. 全局变量
 声明在所有函数之外的变量叫全局变量。全局变量的作用域是由程序中的所有语句构成的。没有初始化的全局变量自动被初始化成0.
 2. 局部变量
 声明在函数内部的变量叫局部变量,局部变量的作用域包含函数内部的所有语句。
 3.块变量
 块变量的作用域包含语句块内部的所有语句
 生命周期:
 全局变量,局部变量和块变量的声明周期也不一样
 
 全局变量的存储位置在程序开始时被分配,在程序结束时被回收。全局变量的生命周期包含整个程序运行期间。
 局部变量的存储位置在函数开始运行时被分配,在函数结束时回收,局部变量的生命周期包括整个函数运行期间。
 形式参数的生命周期和局部变量一样。
 块变量的存储位置在语句块开始运行时被分配,在语句块结束时被回收,它的生命周期包括整个语句块运行期间。
 
声明变量时可以使用关键字
1.auto关键字用来声明自动变量。
所有局部变量缺省都是自动变量,几乎不需要使用这个关键字。
2.static关键字用来声明静态变量,静态变量的生命周期和作用域是和不同东西相关的,它们不一致
静态全局变量:静态全局变量的作用域包括声明它的那个文件中的所有语句。
静态局部变量和静态块变量:生命周期被拉长,它们的生命周期包括整个程序运行期间。
没有初始化的静态局部变量自动被初始化成0。
静态局部变量和静态块变量的初始化只在程序开始时执行一次
3.const关键字用来声明不可赋值的变量
这种变量应该在初始化的时候赋值
  1 #include <stdio.h>
  2 int main() {
  3     const int num = 12;
  4     printf("请输入一个数字:");
  5     scanf("%d", &num);
  6     printf("num是%d ", num);
  7     return 0;
  8 }
用这样的方法,改变了const中的内容,这种变量的内容可以通过其他方式修改
4.volatile关键字用来声明多变的变量。
这种变量的内容随时可能被改变,而且这种改变的原因不是我们的语句构成的。
练习:
1.编写递归函数打印数组中的所有数字。
  1 #include <stdio.h>
  2
  3 void print(int arr[], int size,int curr) {
  4     if(curr == size - 1) {
  5         printf("%d ", arr[curr]);
  6         return ;
  7     }
  8     printf("%d ", arr[curr]);
  9     print(arr, size, curr + 1);
 10 }
 11
 12 int main() {
 13     int arr[] = {1, 7, 3, 45, 2, 8, 9};
 14     print(arr, 7, 0);
 15     return 0;
 16 }

原文地址:https://www.cnblogs.com/dongjian16/p/6729288.html