突然想起来前几天同学问我为什么没有初始化的数组的值是随机的,发现这个困惑自己也是存在的,所以自己总结的心得.

1. 首先,并不是所有未初始化的数组的值都是随机的.对于没有初始化的数组,分两种情况:

(1)全局数组,也就是定义在main函数外面的数组,元素的默认值是全部为0的

(2)局部数组,定义在函数内部的数组,其值默认是随机的.

#include

#define LENGTH 5

inta[LENGTH];intmain()

{for(int i=0;i

printf("%d",a[i]);

}

printf("\n");intb[LENGTH];for(int i=0;i

printf("%d",b[i]);

}

}

0 0 0 0 0

4200814 4200720 49 8 41Process returned0 (0x0) execution time : 0.739s

Press any key tocontinue.

从代码结果可以清楚地看出来,全局数组与局部数组的默认值是不同的.

2.我们接下来再说局部数组为什么是随机的.局部数组是放在栈区的,而全局数组是放在静态区的.

因为局部数组放在栈区,栈的操作就是入栈和出栈.我们声明数组,其实只是移动栈顶指针.而栈内的数据是上一次出栈时候遗留的数据.栈不会清空.所以数据是随机的.下面用一段代码说明.

#include

voidtest();intmain()

{

test();

test();

}voidtest()

{int a[5];for(int i=0;i<5;i++){

printf("%d",a[i]);

}

printf("\n");for(int i=0;i<5;i++){

a[i]=i;

}for(int i=0;i<5;i++){

printf("%d",a[i]);

}

printf("\n");

}

//输出结果

1944480698 1944480941 4200720 6356884 4200814

0 1 2 3 4

0 1 2 3 4

0 1 2 3 4

当我们连续两次调用一个函数的时候.我们发现只有第一次的值似乎是随机的.因为我们两次相同的操作对栈的地址操作也是相同的.我们第一次函数对栈的修改并没有被栈清空,所以第二次的随机值就是第一次最后的数据了.

3.第二次更新,今天又想到了一个骚操作来证明.用的是c++.但是道理都是想通的.

因为重复运行这个代码局部数组的地址总是不变的,我的是0x6afed0.可以通过

printf("%x",a); //a为数组名

来获得数组名,用c++的地址转换将数组首地址赋值给指针sp,然后通过sp操作改变数组第一位的值.以此来解释未初始化的数组的值随机的来源.我们从最终结果可以看出来.内存空间中这个地址当时的值是什么.因为未初始化,所以显示的值就是什么.

#include #include

voidtest();intmain()

{int* sp=reinterpret_cast(0x6afed0);*sp = 168;

test();*sp = 113;

test();

}voidtest()

{int a[5];for(int i=0;i<5;i++){

printf("%d",a[i]);

}

printf("\n");for(int i=0;i<5;i++){

a[i]=i;

}for(int i=0;i<5;i++){

printf("%d",a[i]);

}

printf("\n");

}//输出结果

168 7012032 7012088 7012300 1981401632

0 1 2 3 4

113 1 2 3 4

0 1 2 3 4

c语言字母随机初始值,C语言的未初始化的数组的值为什么是随机的相关推荐

  1. 变量的初始化与使用C语言程序注释,c - (为什么)使用未初始化的变量未定义行为?...

    C标准为编译器提供了很大的优势来执行优化. 如果您假设一个简单的程序模型,其中未初始化的内存被设置为某个随机位模式,并且所有操作都按照它们的写入顺序执行,那么这些优化的后果可能会令人惊讶. 注意:以下 ...

  2. c语言 字母 八进制表示'/1011',C语言C语言第一课:C语言概述为什么学习C语言怎样学习C语言.DOC...

    [摘要]C语言 第一课: C语言概述 为什么学习C语言 怎样学习C语言 参考资料 ----------------------------------------------------------- ...

  3. c语言字母输出什么意思,C语言中字符的输入输出以及计算字符个数的方法详解...

    C语言字符输入与输出 标准库提供的输入/输出模型非常简单.无论文本从何处输入,输出到何处,其输入/输出都是按照字符流的方式处理.文本流是由多行字符构成的字符序列,而每行字符则由 0 个或多个字符组成, ...

  4. c语言字母是怎么存储,C语言之数据在内存中的存储

    C语言之数据在内存中的存储 在我们学习此之前,我们先来回忆一下C语言中都有哪些数据类型呢? 首先我们来看看C语言中的基本的内置类型: char //字符数据类型 short //短整型 int //整 ...

  5. php中修改元素值为5,php怎么改变元素数组的值

    php改变元素数组的值的方法:首先声明一个多数据类型的多维数组:然后通过"$data[0] = 'hello world';"方式修改下标为0的元素的值:最后输出修改后整个数组的结 ...

  6. c语言字母字符参与运算,c语言字符串可以参加运算吗?

    最佳答案 可以运算,但字串连接要用函数不能直接用+ 追问: 比如怎么运算?能写一个表达式吗? 追答: 可以,如char *s="123456";char *s1;s1=s+2; / ...

  7. c语言字母圣诞树,如何用C语言画一个“圣诞树”.pdf

    如如何何用用C语语言言画画一一个个"圣圣诞诞树树" 如何用C语言画一个"圣诞树",我使用了左右镜像的Sierpinski triangle,每层减去上方一小块, ...

  8. c语言字母菱形金字塔编程,C语言打印菱形、金字塔

    今天又看了下刚学C语言时的一些程序,其中有一个打印菱形的. 其目的是程序接收一个整型数字,比方说4,则打印出下面的图案: 虽然知道整体思路,但还是花了十几分钟才把代码写好.(可能是思路不明确,没有思考 ...

  9. c语言 字母消消乐,C语言版消消乐.doc

    #include #include #include void put1(char a[3][3]) //出现游戏初始界面 { int i,j; for(i=1;i<=2;i++) { prin ...

最新文章

  1. ‘numpy.float64‘ object cannot be interpreted as an integer
  2. input placeholder样式
  3. [IDEA] 异常 Configuration is still incorrect. Do you want to edit it again? Error: module not specifie
  4. 2018上半年信息安全工程师真题含答案(下午题)
  5. 【已解决】ModuleNotFoundError: No module named ‘web’的解决办法:
  6. ios 中searchBar进入界面立即聚焦处理方式
  7. java web后台开发规范01
  8. SQL server2016 数据库 基础知识
  9. 3. DICOM图像层级分类-DCMTK-数据字典避坑
  10. android 贴吧列表,Android仿百度贴吧客户端Loading小球
  11. 服务器能打开其他网站打不开,为什么有的网页打不开其他能打开(浏览器网页打不开的原因有哪些)...
  12. Vulntarget靶场渗透笔记[持续更新中]
  13. 百度数据挖掘实习生面试经验
  14. 360 android 应用市场,360手机助手在安卓应用市场占大份额
  15. 顺序栈的创建以及各种操作
  16. 【C语言】自定义类型(结构体类型+枚举类型+联合体类型)[进阶篇_ 复习专用]
  17. 神了,阿里数据库专家纯手写了这份604页的Oracle+MySQL攻坚指南
  18. [Leetcode刷题心得][数组、字符串]242. 有效的字⺟母异位词
  19. 轻量级 Linux 发行版CRUX 发布 3.4 版
  20. python使用while、for及循环嵌套实现直角三角形及正、倒金字塔

热门文章

  1. 【C语言】求s(n)=a+aa+aaa+...+aa...a的值
  2. mysql innodb引擎数据存储方式和索引的概念
  3. 数据库 外键 优缺点_不同数据格式的优缺点:键值与元组
  4. 什么是客户旅程_为什么记录您的旅程将导致开发人员成功
  5. php苹果app微信支付 无法返回,微信支付,php_微信支付APP返回-1怎么解决,微信支付,php,移动app - phpStudy...
  6. ssh协议是osi_计算机网络协议分析
  7. 手把手教你使用Python网络爬虫获取招聘信息
  8. 使用Python创建一个系统监控程序
  9. 基于vue2.0 + elementUI 后台管理平台
  10. 微软认知服务开发实践(2) - 计算机视觉