一些问题,请教。

来源:互联网  时间:2016/8/21 0:32:19

关于网友提出的“ 一些问题,请教。”问题疑问,本网通过在网上对“ 一些问题,请教。”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: 一些问题,请教。
描述:

一些问题,请教。
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(虚空无转) 
可是无辜呀!

解决方案2:

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;
}
//---------------------------------------------------------------------------

解决方案3:

对,一是没有错的,在进行运算是,不同的数据类型要先转换成同一类型,然后再进行运算的,而C++的数据类型转换由下表表示出来
高 double ← float
      ↑  
     long
      ↑
   unsigned
      ↑      
低  int ←char,short

解决方案4:

1.没错
2.mval是一个mumble类型的变量
3.pia+2得到的是一个右值,不可写,就算可写也不能给指针变量赋非法地址值,只能这样 *(pia+2)=1

解决方案5:

我又查了《C++程序设计语言》P731 C.6.3普通算术转换:
......否则,如果某个运算对象是float,则另一个转换为float。
geeksky(虚空无转)举的转换规则应是潭浩强《C程序设计》P21 图2.3吧,我想要不就是老潭错了,要不就是C就是这样,我看后者的可能性比较小。因为两位大师都是这样说的。^_^

解决方案6:

楼上两位还是免了吧
隐式转换是不能够用代码来表达的
不然就成了显式转换了!

上一篇要把一条命令转成可以直接拿来用的函数。
下一篇c++代码,为什么提示:不允许使用不完整的类型?
明星图片
相关文章
《 一些问题,请教。》由码蚁之家搜集整理于网络,
联系邮箱:mxgf168#qq.com(#改为@)