变量初始化的意义

在C/C++程序中一般有一下存储区:
1.栈,由编译器自动分配释放,一般指函数内部的存储空间。
2.堆,由程序员手动分配释放,若未释放,程序结束时会被由OS回收
代码中通过new/malloc/relloc等显示申请的内存都属于堆上,这些内存需要手动的去free/delete
3.静态存储区:全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。
4.常量存储区,这是一块比较特殊的存储区,他们里面存放的是常量,不允许修改

在学习C语言的时候,绝大部分教材里一定会降到声明变量的时候需要初始化。

int a;
printf("%d", a);   //此时的输出就可能是一个随机值。

看一个例子:

void f() {
  int a = 1;
  printf("address %p:%d", &a, a);
}
void g() {
  int a ;
  printf("address %p:%d", &a, a);
}
int main() {
  f();
  g();
  return 0;
}
结果输出:
address0x7fffbf281ea4:1
address0x7fffbf281ea4:1

为什么两个a的地址一样?

f和g两个函数内的a都是栈上的空间,f()执行完后,那块栈上空间,已经被回收,标记为可用了。然后调用g(),g和f的大小是一样的,没出意外的话,g的栈地址还是从上次f的那块开始,所以a地址一样的。

为什么两个a的值一样?

栈空间被回收了,只是表示那块地址可以被使用,但地址里的内容,系统可不否则维护,在你释放了后去檫除,所以g中的a指向了上次a的那块地址,内容还是那块内容。所以a的值还是1。
这就是变量初始化的意义。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容