标签:递归 idt 字符 style lsp img gis alt 其它
类型 |
作用域 |
生命周期 |
auto变量 |
一对{}内 |
当前函数 |
static局部变量 |
一对{}内 |
整个程序运行期 |
extern变量 |
整个程序 |
整个程序运行期 |
static全局变量 |
当前文件 |
整个程序运行期 |
extern函数 |
整个程序 |
整个程序运行期 |
static函数 |
当前文件 |
整个程序运行期 |
register变量 |
一对{}内 |
当前函数 |
C语言变量的作用域分为:
局部变量也叫auto自动变量(auto可写可不写),一般情况下代码块{}内部定义的变量都是自动变量,它有如下特点:
#include <stdio.h> void test() { //auto写不写是一样的 //auto只能出现在{}内部 auto int b = 10; } int main(void) { //b = 100; //err, 在main作用域中没有b if (1) { //在复合语句中定义,只在复合语句中有效 int a = 10; printf("a = %d\n", a); } //a = 10; //err离开if()的复合语句,a已经不存在 return 0; }
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> #include <stdlib.h> #include <math.h> #include <time.h> void fun01(int a) { return 0; } int main(void) { // 局部变量 // 定义变量:局部变量 在函数内部定义的变量 使用auto修饰、栈区存储 // 作用域:在函数内部 // 生命周期:从创建到函数结束 // 局部变量未初始化,值为乱码 auto int a = 10; printf("%d\n", a); // 局部变量I,只限于for循环使用 for (int i = 0; i < 10; i++) { break; } return 0; }
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> #include <stdlib.h> #include <math.h> #include <time.h> // 全局变量 // 全局变量、在函数外部定义的变量、存储数据区、可以和局部变量重名 // 作用域:整个项目中所有文件、如果在其他文件中使用 需要声明 extern // 生命周期:从程序创建到程序销毁 // 全局变量未初始化、值为0 extern int a = 10; int main(void) { printf("%d\n", a); int a = 123; // 匿名内部函数、执行完销毁 { int a = 123456; printf("%d\n", a); } // 数据在操作时会采用就近原则 printf("%d\n", a); return 0; }
#include <stdio.h> void fun1() { int i = 0; i++; printf("i = %d\n", i); } void fun2() { //静态局部变量,没有赋值,系统赋值为0,而且只会初始化一次 static int a; a++; printf("a = %d\n", a); } int main(void) { fun1(); fun1(); fun2(); fun2(); return 0; }
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> #include <stdlib.h> #include <math.h> #include <time.h> void fun04() { // 静态局部变量 // 静态局部变量只会初始化一次,可以多次赋值 // 正常局部变量函数执行完后会被销毁 // 在数据区进行存储 // 作用域:只能在函数中使用 // 生命周期:从程序创建到程序销毁 // 静态局部变量未初始化、值为0 static int b = 10; b++; printf("%d\n", b); } int main(void) { for (int i = 0; i < 10; i++) { fun04(); } return 0; }
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> #include <stdlib.h> #include <math.h> #include <time.h> // 静态全局变量 // 作用域:可以在本文件中使用、不可以在其他文件中使用 // 生命周期:程序创建到程序销毁 // 静态全局变量未初始化、值为0 static int c = 10; int main(void) { printf("%d\n", c); return 0; }
声明一个变量,这个变量在别的文件中已经定义了,这里只是声明,而不是定义。
extern int a;
在C语言中函数默认都是全局的,使用关键字static可以将函数声明为静态,函数定义为static就意味着这个函数只能在定义这个函数的文件中使用,在其他文件中不能调用,即使在其他文件中声明这个函数都没用。对于不同文件中的staitc函数名字可以相同。
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> #include <stdlib.h> #include <math.h> #include <time.h> // 全局函数 // 添加函数声名 void fun03(); // 函数可以调用自己、称为递归函数 int main(void) { // 全局函数名称是作用域中唯一的 // 作用域:在整个项目中所有文件中使用 // 存储区域:代码区 fun03(); return 0; }
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> #include <stdlib.h> #include <math.h> #include <time.h> // 静态函数 // 作用域:当前文件中 // 静态函数可以和全局函数重名 // 生命周期:重程序创建到程序销毁 // 存储区域:代码区 static void fun03() { printf("%d\n", 10); } int main(void) { fun03(); return 0; }
标签:递归 idt 字符 style lsp img gis alt 其它
原文地址:https://www.cnblogs.com/xiangsikai/p/12378680.html