关于网友提出的“ 一些问题,请教。”问题疑问,本网通过在网上对“ 一些问题,请教。”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: 一些问题,请教。描述:
一些问题,请教。
1.C++Primer书中第148页:
char cval;
int ival;
float fval;
//在计算加法前,ival和cval都被转换成double
cval + fval + ival;
是不是应该 ival和cval都被转换成float?是印刷错误吧?
2.对于一个枚举
enum mumble{m1,m2,m3} mval;
最后的mval是什么意思?
3.已知下列对象定义:
const int array_size=8;
int ia[array_size]={0,1,2,3,4,5,6,7};
int *pia = ia;
那么下面的赋值操作哪里错了?为什么呢?
pia + 2 = 1;
是因为数组元素的地址不可写吗?
解决方案1:
怎么是错的?
运行不出来么?
那算什么测试?
结果是什么?
用下面的测试一下:
#include "iostream.h"
main(){
int ival=1;
float fval=1.1;
char cval='a';
cout<<>
return 1;
}
输出8
没错吧!
我和 geeksky(虚空无转)
可是无辜呀!
1是错的!!!
本人在C++ Builder 5中用以下的程序测试过的。
//---------------------------------------------------------------------------
#include
#pragma hdrstop
#include
//---------------------------------------------------------------------------
#pragma argsused
int main(int argc, char* argv[])
{
char cval('d');
int ival(5);
float fval(6.0);
double dval(7.00);
//String s;
cout << "char size:" << sizeof(cval) << "\t"
<< "int size:" << sizeof(ival) << "\t"
<< "float size:" << sizeof(fval) << "\t"
<< "double size:" << sizeof(dval) << "\t"
<< "char + int + float size:" << sizeof(ival + fval + cval) << "\n"
<< "Press any key to continue." << endl;
cin >> ival;
return 0;
}
//---------------------------------------------------------------------------
对,一是没有错的,在进行运算是,不同的数据类型要先转换成同一类型,然后再进行运算的,而C++的数据类型转换由下表表示出来
高 double ← float
↑
long
↑
unsigned
↑
低 int ←char,short
1.没错
2.mval是一个mumble类型的变量
3.pia+2得到的是一个右值,不可写,就算可写也不能给指针变量赋非法地址值,只能这样 *(pia+2)=1
我又查了《C++程序设计语言》P731 C.6.3普通算术转换:
......否则,如果某个运算对象是float,则另一个转换为float。
geeksky(虚空无转)举的转换规则应是潭浩强《C程序设计》P21 图2.3吧,我想要不就是老潭错了,要不就是C就是这样,我看后者的可能性比较小。因为两位大师都是这样说的。^_^
楼上两位还是免了吧
隐式转换是不能够用代码来表达的
不然就成了显式转换了!