C语言中变量的默认初始值

在对数组元素求和时,竟然离奇的发现错了,冲了一会儿浪之后才现在问题在这里

main函数代码:

int main(void){
	int arr[5] = {1,2,3,4,5};
	int res = sum(arr,arr+5);
	printf("%d",res);
}

求和函数(利用双指针求的数组元素之和)为:

int sum(int *start,int *end)
{
	int total;
	while(start < end){
		total += *start;
	}
	return total;
}

惊奇的发现结果是:32
于是将int total;改为int total = 0;之后显示15正确。
最后进行总结:没有弄清楚C语言中原始变量的初始值造成的

结论:在C语言中,局部变量时如果未初始化(int total;),则值是随机的

int main (void){
	int num;
	int num2 = 5;
}

num2的值初始化为5,但是num变量的值是之前占用分配num的空间中的任意值,别指望这个值会是0.

定义局部变量,其实就是在栈中通过移动栈指针来给程序提供一个内存空间和这个局部变量名绑定。因为这段内存空间在栈上,而栈内存是反复使用的(脏的,上次用完没清零的),所以说使用栈来实现的局部变量定义时如果不显式初始化,值就是脏的,即随机的。

c语言中只有局部变量在未赋初值时,才是随机数。

全局变量和静态变量未赋初值时编译器会自动将其初始化为0

局部变量是分配在堆栈上的,而全局变量和静态变量是分配在数据段中的。这个跟程序的内存分配是有关系的。
C语言中内存分配与释放里面对于C语言中的内存分配讲的很清楚,可以参考。
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江南霹雳堂雷家雷无桀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值