c语言问题,请问为何外部函数s未赋初值,程序无问题且系统自动为其初始化为 0 。s不是应该是个随机数吗?

写出程序的运行结果。

#include <stdio.h>

int s;

int fun(int n)

{

static int s=1;

s*=n;

return s;

}

int main()

{

int n=1;

for ( ;n<=4;n++)

{

s+=fun;

printf("%d,%d\t",n,s);

}

return 0;

}

S在外部生命,是分配在堆上的变量,默认初始为0,如果把S生命在main里面那就是在栈上的变量,如果不初始化,其值才是随即的。
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-11-20
全局变量不同于局部变量,会自动初始化为0的

在c语言中没有对一个变量赋值它的值是否自动赋0
它的值是否会自动赋值为0,取决于变量的类型。全局变量包括静态全局变量和非静态全局变量,在没有初始化值时,其值自动为0,即定义在所有函数外,不归属于任何一个函数的,在没有初始化值时,自动为0;静态全局变量当定义在函数内的全局变量,有static标记时,默认初始化为0值;非静态全局变量没有默...

c语言中定义变量,为什么不赋初值啊?
3. **默认初始值:** 在 C 语言中,未显式初始化的局部变量将包含不确定的值(即垃圾值)。这是因为 C 不会自动初始化局部变量的内存。在某些情况下,程序员可能不关心变量的初始值,因为它会在稍后的代码中被正确初始化。4. **方便性:** 在某些情况下,程序员可能简单地忘记或选择不初始化...

为什么C语言的变量未赋初值,其值就为随机数?
这里的随机其实不是指这个变量的值是任意的,只是这个值不是你确定的。如果你了解定义一个变量就是给它分配了一块内存,但是因为没有初始化,所以这块内存里的值你是不知道的,可能是你以前赋过的值,也可能是某些程序运行是产生的,所以一般都认为其值是无法预料的。希望能帮到你,谢谢。

C语言字符数组不赋初值是默认为'\\0'还是随机值
普通数组没有赋初值,默认的数组元素值是随机数,不是0。如果在定义数组时,数据类型前面加上关键字static,数组变成了静态数组;或者把数组定义在函数的外面,成为全局变量数组,这时数组元素的值自动赋值为0。例子:includeint main(void){ int m = 0;static int n;int a = 5, b = 6, c = ...

C语言:为什么变量j不赋初值程序就运行失败?
因为你下面j第一次引用的语句是dp[j]=dp[0]。而在这之前对j赋值的语句是写在for循环的if里,如果if不成立,那么j就没有赋值,没有赋值,如果j又没初值,那么就是随机值,那么dp[j] 就可能访问越界。

C语言定义一个整型二维数组,若没有赋值,系统自动给的是0吗??
C语言规定,普通数组没有赋初值,默认的数组元素值是随机数,不是0。如果在定义数组时,数据类型前面加上关键字static,数组变成了静态数组;或者把数组定义在函数的外面,成为全局变量数组,这时数组元素的值自动赋值为0。

c语言中的未赋值参数是否默认为0
很多情况下不为0)。你可以测试一下:include <stdio.h> int a; \/\/全部变量 int main(){ static int b;int c;printf("a = %d, b = %d, c = %d\\n", a, b, c);return 0;} 变量在定义时就将其初始化是比较完全的方法。很多软件问题都是由于变量未初始化引起。

C语言定义一个整型二维数组,若没有赋值,系统自动给的是0吗??
C语言规定,普通数组没有赋初值,默认的数组元素值是随机数,不是0。如果在定义数组时,数据类型前面加上关键字static,数组变成了静态数组;或者把数组定义在函数的外面,成为全局变量数组,这时数组元素的值自动赋值为0。

c语言,当数组某些元素未被赋值时其值为多少?
数组未初始化有两种情况:1,未初始化,其值有两种可能:一种是全局数组,被编译器初始化为0。一种是局部数组,为随机数。2, 已初始化,局部数组和全局数组,已初始化,未赋值的数组都会被赋值为0。

C语言问题,未给指针变量指定初始值真的有危险吗
初学者最好养成给指针变量赋初值的习惯 至于原因嘛,就是上述文段:如果你不给它赋初值开始他就会乱指,当你对它操作时极有可能改动到他指向的内容,要是他指向已经被使用的地址,悲剧很可能就发生了;当然了,如果你每次在使用到指针变量前都注意到它的指向,是可以避免出错的,但很多时候难免会大意...

相似回答