c语言字母随机初始值,C语言的未初始化的数组的值为什么是随机的
突然想起来前几天同学问我为什么没有初始化的数组的值是随机的,发现这个困惑自己也是存在的,所以自己总结的心得.
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语言的未初始化的数组的值为什么是随机的相关推荐
- 变量的初始化与使用C语言程序注释,c - (为什么)使用未初始化的变量未定义行为?...
C标准为编译器提供了很大的优势来执行优化. 如果您假设一个简单的程序模型,其中未初始化的内存被设置为某个随机位模式,并且所有操作都按照它们的写入顺序执行,那么这些优化的后果可能会令人惊讶. 注意:以下 ...
- c语言 字母 八进制表示'/1011',C语言C语言第一课:C语言概述为什么学习C语言怎样学习C语言.DOC...
[摘要]C语言 第一课: C语言概述 为什么学习C语言 怎样学习C语言 参考资料 ----------------------------------------------------------- ...
- c语言字母输出什么意思,C语言中字符的输入输出以及计算字符个数的方法详解...
C语言字符输入与输出 标准库提供的输入/输出模型非常简单.无论文本从何处输入,输出到何处,其输入/输出都是按照字符流的方式处理.文本流是由多行字符构成的字符序列,而每行字符则由 0 个或多个字符组成, ...
- c语言字母是怎么存储,C语言之数据在内存中的存储
C语言之数据在内存中的存储 在我们学习此之前,我们先来回忆一下C语言中都有哪些数据类型呢? 首先我们来看看C语言中的基本的内置类型: char //字符数据类型 short //短整型 int //整 ...
- php中修改元素值为5,php怎么改变元素数组的值
php改变元素数组的值的方法:首先声明一个多数据类型的多维数组:然后通过"$data[0] = 'hello world';"方式修改下标为0的元素的值:最后输出修改后整个数组的结 ...
- c语言字母字符参与运算,c语言字符串可以参加运算吗?
最佳答案 可以运算,但字串连接要用函数不能直接用+ 追问: 比如怎么运算?能写一个表达式吗? 追答: 可以,如char *s="123456";char *s1;s1=s+2; / ...
- c语言字母圣诞树,如何用C语言画一个“圣诞树”.pdf
如如何何用用C语语言言画画一一个个"圣圣诞诞树树" 如何用C语言画一个"圣诞树",我使用了左右镜像的Sierpinski triangle,每层减去上方一小块, ...
- c语言字母菱形金字塔编程,C语言打印菱形、金字塔
今天又看了下刚学C语言时的一些程序,其中有一个打印菱形的. 其目的是程序接收一个整型数字,比方说4,则打印出下面的图案: 虽然知道整体思路,但还是花了十几分钟才把代码写好.(可能是思路不明确,没有思考 ...
- c语言 字母消消乐,C语言版消消乐.doc
#include #include #include void put1(char a[3][3]) //出现游戏初始界面 { int i,j; for(i=1;i<=2;i++) { prin ...
最新文章
- ‘numpy.float64‘ object cannot be interpreted as an integer
- input placeholder样式
- [IDEA] 异常 Configuration is still incorrect. Do you want to edit it again? Error: module not specifie
- 2018上半年信息安全工程师真题含答案(下午题)
- 【已解决】ModuleNotFoundError: No module named ‘web’的解决办法:
- ios 中searchBar进入界面立即聚焦处理方式
- java web后台开发规范01
- SQL server2016 数据库 基础知识
- 3. DICOM图像层级分类-DCMTK-数据字典避坑
- android 贴吧列表,Android仿百度贴吧客户端Loading小球
- 服务器能打开其他网站打不开,为什么有的网页打不开其他能打开(浏览器网页打不开的原因有哪些)...
- Vulntarget靶场渗透笔记[持续更新中]
- 百度数据挖掘实习生面试经验
- 360 android 应用市场,360手机助手在安卓应用市场占大份额
- 顺序栈的创建以及各种操作
- 【C语言】自定义类型(结构体类型+枚举类型+联合体类型)[进阶篇_ 复习专用]
- 神了,阿里数据库专家纯手写了这份604页的Oracle+MySQL攻坚指南
- [Leetcode刷题心得][数组、字符串]242. 有效的字⺟母异位词
- 轻量级 Linux 发行版CRUX 发布 3.4 版
- python使用while、for及循环嵌套实现直角三角形及正、倒金字塔
热门文章
- 【C语言】求s(n)=a+aa+aaa+...+aa...a的值
- mysql innodb引擎数据存储方式和索引的概念
- 数据库 外键 优缺点_不同数据格式的优缺点:键值与元组
- 什么是客户旅程_为什么记录您的旅程将导致开发人员成功
- php苹果app微信支付 无法返回,微信支付,php_微信支付APP返回-1怎么解决,微信支付,php,移动app - phpStudy...
- ssh协议是osi_计算机网络协议分析
- 手把手教你使用Python网络爬虫获取招聘信息
- 使用Python创建一个系统监控程序
- 基于vue2.0 + elementUI 后台管理平台
- 微软认知服务开发实践(2) - 计算机视觉