⑴ c语言强制类型转换
1、int a;int b;double c = (double) a;double c = (double) b;int a = (int) c;这就是一种强制转变方法。
⑵ C语言中强制类型转换
我知道啊,呵呵,因为printf("%d",'12'),打印的是存储12的内存地址上的内容,即ASCII码值,12的低位数存储在低位地址,即1存储在低位,高位存储在高位地址,0x32就是2的ASCII码,0x31就是1的ASCII码,所以是0x3231,转换成10进制就是12849!
⑶ C语言强制类型转换
强制类型转换是把变量从一种类型转换为另一种数据类型。
例如,如果想存储一个long类型的值到一个简单的整型中,需要把long类型强制转换为int类型。可以使用强制类型转换运算符来把值显式地从一种类型转换为另一种类型。
发生在同一个编译系统中,比如说把int转化为longint,在VC++6.0里面,longint和int都是4个字节,不会有问题的,但是如果把int类型转化为short类型那就装不下了,简而言之就是长类型不能转化为短类型。
int类型如果要转化为float、double、longdouble类型的时候只是末尾多了几个0,但是反之转化,就会出现数据的损失,小数部位都被省略掉了。
赋值中的类型转换
当赋值运算符两边的运算对象类型不同时,将要发生类型转换, 转换的规则是:把赋值运算符右侧表达式的类型转换为左侧变量的类型。
由于C语言中的浮点值总是用双精度表示的,所以float 型数据只是在尾部加0延长为double型数据参加运算,然后直接赋值。double型数据转换为float型时,通过截尾数来实现,截断前要进行四舍五入操作。
以上内容参考:网络-C语言类型强制转换
⑷ 关于C语言强制类型转换的问题
因为你把j定义成一个int变量,执行完
j=(float)i;一句以后事实上i=3,j=3,但输出的时候却要求以%f输出,printf检查到j的类型为int不满足%f的格式,故而输出时未将j的值代入到"%d,%f"中,而是输出%f格式的默认值0.000000。相当于执行了printf("%d,%f",i);
你把int
i,j;一句改成int
i;
float
j;就能够输出
3,3.000000了
⑸ 关于c语言的指针强制类型转换的问题,如图,定义了4个char型数组,其中两个数组是的绝
出现这样的问题是因为在这个16位系统中,要求所有的16位或者32微数据都是对齐的数据。
这个对齐指的是,数据从偶数地址开始存放。这样的话,这个存放在存储器中的数据可以更有效地存取;否则这个数据的存取将需要花更多的时间(更根本的原因要深入到微机原理课程了。而实际上16位数据一定占用了两个地址所对应的单元,比如一个16位数起始地址为0x200,那么他就占用了0x200和0x201这两个地址所对应的单元,16位系统中这样的(以偶地址开始存放的)两个单元的数据可以一次被处理器所读写)。为了存取数据花费不必要的更多的的时间的情况出现,系统就禁止这样存放16位或者32位数据。这样16为或者32位数据的地址就总是偶数。于是当把一个奇数作为一个16位数的起始地址就会有这样的错误。
至于要避免,可能是不能避免这种情况但可以避免出错。这样就需要在转换之前做一个检查,如果要转化的是个奇数地址,就不要直接转换了,而是要变通的处理了。怎么变通,我想要视数据具体要如何处理而定。
⑹ C语言题 关于强制转换类型 麻烦有详细过程 谢谢
这个和强制类型转换没有啥关系。主要考察的是对指针进行++运算的时候,需要跳过的字节数。
对一个指针进行++运算,需要跳过他本身那个类型的长度。举个例子:
比如int *p,p++,int类型占用4个字节,那么p++一次就跳过4个字节。
比如short *p,p++,short类型占用2个字节,那么p++一次就跳过2个字节。
再看上面的题目:
char *p="abcdefgh"
long *q;
q=(long*)p;
将p强制转换成(long*)赋值给q,即q也指向"abcdefgh"这个字符串的首地址
q++;
这个时候执行q++的话,由于long类型占用4个字节,那么q就一次跳过4个字节,就指向"efgh",跳过了“abcd”4个字节。
r=(char*)q;
然后再将q强制转换成(char*)赋值给r,即r指向了q指向的"efgh"这个字符串的首地址
printf("%s\n",r);
然后打印r的话,就打印的是efgh了。
⑺ 关于C语言强制类型转换
当然不可以,你可以参加教材后面的有关“运算符的附录”,了解 强制类型转换运算符 的用法。