1、局部变量&静态局部变量
1、局部变量
a、作用域:在定义变量的{}之内有效
b、声明周期:程序运行至变量定义处开辟内存空间,所在函数运行结束之后释放空间
c、未初始化的变量值:随机
2、静态局部变量
a、作用域:在定义变量的{}之内有效
b、声明周期:在执行main函数之前就已经开辟空间,程序结束之后才会释放空间
c、未初始化的变量值:0
以下例子有个疑问,为什么函数func执行之后对应的指针p仍然可以打印出func的局部变量的内容:
#define _CRT_SECURE_NO_WARNING
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
//1、局部变量
//a、作用域:在定义变量的{}之内有效
//b、声明周期:程序运行至变量定义处开辟内存空间,所在函数运行结束之后释放空间
//c、未初始化的变量值:随机
//2、静态局部变量
//a、作用域:在定义变量的{}之内有效
//b、声明周期:在执行main函数之前就已经开辟空间,程序结束之后才会释放空间
//c、未初始化的变量值:0
int* func() {
static int num = 10;
//int a = 1;
{
num++;
printf("func-num:%d\n",num);
}
//return &a;不安全,a的变量可能会被释放掉
return #
}
void main(int argc, char* argv[]) {
int* p = NULL;
p = func();
printf("main-num:%d\n", *p);//如果func返回的&a则为 1 如果是return &num 11
p = func();
printf("main-num:%d\n", *p);//如果func返回的&a则为 1 如果是return &num 12
system("pause");
}