1.程序的内存区域
内存:程序运行的地方
分区如下
1)代码区:存放程序代码与各函数的地方
2)数据区:存放全局变量、静态变量和常量
3)栈区:存放局部变量,形参(形参一定是局部变量,但局部变量不一定是形参)
4)堆区:存放动态数据,需要指针访问(运行时分配给生成数据的内存)
2.
局部变量:只能在定义它的函数体内部访问,运行结束后内存会被释放
全局变量:全程序都可以访问修改的变量,与函数栈平级,且默认初始化为0
注:
1)全局变量可以共享公用数据,减少传参
2)若局部变量与全局变量重名,局部变量优先级高于全局变量
3.const关键字
可以把一块内存声明为只读属性
4.static关键字
static修饰局部变量:局部静态变量在调用后不会被销毁,保持其值与存在
static修饰全局变量:全局静态变量使该变量只在其声明所在的文件中可见(避免与其他文件中的同名变量冲突)
static修饰函数:静态函数只能在声明所在的文件内部调用,无法被其他文件调用
#include <stdio.h>
char ch = 'b';//全局变量
void func(const int a/*如果在该函数中不想修改此形参变量则用const修饰*/, int b)//形参
{
int num = 123;
printf("%s\n", __func__);//打印函数名
printf("%c\n", ch);//可调用全局变量
int ch = 'a';
printf("%c\n", ch);//调用的是局部变量
printf("%c\n",::ch);//用"::"在重名时访问全局变量
}
void func1()
{
static int i=0;
i++;
printf("访问func1的次数为%d\n", i);
}
int main()
{
int a = 9+'1';//局部变量
const int b = 9;
//b = 1;报错
//const int c;报错,const变量要初值
func(1, 2);
func1();
func1();
printf("a=%c\n", a);
//可以看到i没有重置哦
return 0;
}