[C++]面试题,持续跟新中...

  • 已知int x = 5;执行下列语句后,x的值为
  • x+=x-=x*x
先算x-=x*x,得x=5-5*5,x=-20;再算x+=x;得出x=40
  • 请问下列代码的输出结果是什么?
  • int m[] = {1,2,3,4,5,6,7,8,9,0};
        int(*p)[4] = (int(*)[4])m;
        printf("%d",p[1][2]);
指针数组和数组指针的区别
int *p[4] 和int (*p)[4]的区别
int *p[4]; //定义一个指针数组,该数组中每个元素是一个指针,每个指针指向哪里就需要程序中后续再定义了。
int (*p)[4]; //定义一个数组指针,该指针指向含4个元素的一维数组(数组中每个元素是int型)。

区分int *p[n]; 和int (*p)[n]; 就要看运算符的优先级了。
int *p[n]; 中,运算符[ ]优先级高,先与p结合成为一个数组,再由int*说明这是一个整型指针数组。
int (*p)[n]; 中( )优先级高,首先说明p是一个指针,指向一个整型的一维数组。
1、int (*p)[4]:定义一个数组指针,该指针指向含4个元素的一维数组(数组中每个元素是int型); 
2、(int (*)[4])m:表示将m强制转换为大小为4的数组指针;

1、int (*p)[4]:表示行指针,单位移动量为4个int类型。即p+1,则一次移动4个int类型 

2、(int (*)[4])m:表示以数组指针类型组织m,每4个为一个数组 

3、这样一来,m为{{1,2,3,4},{5,6,7,8},{9,0, , }},p指向第一行 

4、故p[1][2]即*(*(p+1)+2),表示第二行第三个元素,为7

Class A;

Class B;

void F(){

A a;

B b;

}

在函数F中,本地变量a和b的构造函数和析构函数的调用顺序是:

a 构造,b构造,b析构,a析构

按变量声明顺序构造对象,然后入栈 
按相反顺序出栈,析构对象。

类的私有成员只能被类中的成员函数访问,任何类以外的函数对它们的方位都是非法的

这句话说法是错误的
友元函数可以访问

运算符等级

括号成员第一; // ()和 .
全体单目第二; // ++ -- +(正) -(负) * &
乘除余三 // * / %
加减四 // + -
位移五 // >> <<
关系六 // > < >= <=
等于不等排第七 // == !=
位与异或和位或三分天下 *** 十 //& ^ | 逻辑或跟与十二和十一 // || &&
条件高于赋值
逗号运算符最低

选择编程风格良好的条件比较语句

A.假设布尔变量名字为fag,它与零值比较的标准if语句如下。

第一种1 if (flag = TRUE)
2 if (flag = FALSE

第二种:
1 if (flag)
2 if(!flag)

B.假设整型变量的名字为 value,它与零值比较的标准i语句如下。
第一种:
1 if (value = 0)
2 if (value 1=0)

第二种

1 if (value)
2 if (!value)

C.假设浮点变量的名字为x,它与0.0的比较如下.
第一种:
if(x==0.0)
if(xl=0.0)
第二种:
1 if ((x >=-EPSINON )&&(X <= EPSINON))
2 if((x <-EPSINON)II(X> EPSINON)

其中, EPSINON是允许的误差(精度).

D.指针变量p与0的比较如下.
第一种:
1 if(p=NULL)
2 if(p!= NULL)

第二种:
1if(p==0)
2 if(p !=0)

解析

A 的第二种风格较良好.根据布尔类型的语义,零值为"假"(记为 FALSE),任何非零值都是"真"(记为TRUE).TRUE的值究竟是什么并没有统一的标准例如Ⅴisual C++将TRUE定义为1,而Ⅴisual basic则将TRUE定义为-1.因此不可将布尔变量直接与TRUE、 FALSE进行比较.


B 的第一种风格较良好,第二种风格会让人误解 value是布尔变量,应该将整型变量用"=="或"!="直接与0比较.


C 的第二种风格较良好.注意:无论是foat还是 double类型的变量,都有精度限制.所以一定要避免将浮点变量用"="或"!="与数字比较,应该设法转化成">="或"<="形式.


D 的第一种风格较良好,指针变量的零值是"空"(记为NULL).尽管NULL的值与0相同,但是两者意义不同.用p与NUL显式比较,强调p是指针变量.如用p与0比较,容易让人误解p是整型变量.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘大望

谢谢你请的咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值