为什么在C语言中任何变量定义后,其数据类型不能改变?,只能改变其值

如题所述

举个例子:int i; 这里 i是整形变量,这个过程中,内部已经给它分配了一个整形空间用来存储整形变量,也就是说 这个空间存储不了非整形变量。假如你硬要给它赋值非整形变量如i=1.1,c语言会直接取整数部分,小数部分舍弃,结果还是整形。
如果你硬要在使用过程中改变其数据类型也不是没有办法。那就是对其强制类型转换,例如将整形转位浮点行 j= (float)i 这里i就相当于浮点型,但是只限于这个式子。在这个式子外,其还是整形。追问

有一道题是这样的
经过下述赋值后,变量x的数据类型是()

int x=3;

double y;

y=(double) x;
答案是Int。如果是int,其强制类型转换后,它的类型没有转化。是书上错了吗

追答

书上没错,看来你还没看懂我说的。我说的是 j= (float)i这个式子中你可以把(float)i看做是浮点型来理解,但i的值还是整形。和上面的题目完全符合。
对应题目来解释下:y=(double) x中(double) x可以理解为double行,但是x是整形由始至终都不会变。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-10-17
在C语言中,任何类型的变量在定义后,当给变量赋值时,给他们在内存中分配的空间就是一定的了,不同的数据类型在内存中占的大小不同,这时我们就只能根据数据类型给变量赋值,不能超出类型的最大限制…
因此变量的类型不能随便改动,否则会发生内存溢出,或者内存错乱的现象…改变值的大小时也要注意,不能超出了类型的取值范围……
第2个回答  2011-10-17
变量在声明的时候,系统并不会分配内存,但是一旦变量被定义了,那么系统就会为他分配一块内存,在同一个编码环境下,这个内存大小只和变量的类型有关。这时候如果你要改变变量的类型,相当于要改变变量的内存空间大小,这个编译器是不允许的。
如果一定要转换,可以用强制类型转换,比如:
int main()
{
int i = 0;
float j = (float) i ;
cout << (float) j << endl;
return 0;
}
第3个回答  2011-10-17
这就像你生了个儿子一样(变性手术除外),你只能改他的名字,他的外形,身高什么的……改不了他是你儿子这个事实。变量一定一下来必须有一个本质的类型,这个类型在变量的生命周期里面是不可更改的 (无聊了,来了个比喻,不好意思哦)
相似回答