C 数组的初始化问题 ?

今天看了一个代码:

int main(){
  char buff[10];
   printf("%d\n", buff[2]);   // 输出一些随机的数字或字符
   return(0);
}

我也很久没接触C了,和我印象中C数组的声明有些不一样。我记得数组需要一些初始化的,类似 char buff[10] = {0}; 或者 static char buff[10];。为何上面的数组不需要初始化??还是我本来就记错了??

是不是当char buff[10]的时候,已经在内存中的什么地方为这个数组分配了空间??当我用gdb调试的时候,print buff,会输出_\000%\000\000\000\000?\177

谢谢解疑。

阅读 9.8k
2 个回答

局部变量的空间分配在栈上;没有初始化的时候,取决于编译器的实现,一般不应该做任何假定。

C/C++中除了全局变量都不会进行初始化。需要程序员自己初始化,也就是像楼主说的那样。 这个程序故意对没有初始化的数组读取。是不规范的代码

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题