1、float a,b,c; (a+b)+c == (b+a)+c, (a+c)+b == (a+b)+c 是否相等,为什么?
2、运算符优先级:后置++、--大于前置++、--大于*。
int a, b, c, d;
a = 10;
b = a++;
c = ++a;
d = 10 * a++;则:a = 13, b=10, c=12, d=120.
3、引用,指针的区别
1、引用定义时必须赋初值,指针可以不。
2、指针可以为空值,引用不行。
3、指针和引用的自增不同。
4、sizeof指针和引用不同。
5、指针赋值后可以改变,引用不可以,只能从一而终。
4、常量指针、指针常量。
const在*号的左侧,那么就是常量指针,该指针指向一个常量,不可以通过*p修改该常量的值,但是p可以指向另一个常量
const在*号的右侧,那么就是指针常量,该指针本身是一个常量,可以通过*p修改该常量的值,但是p不可以指向别的常量
5、main执行前执行的代码:
1、初始化static静态和globle全局变量。
6、i++,++i的区别:
1、i++返回原来的值,而++i返回+1后的值。
2、i++不能作为左值,而++i可以。 原因:
// 前缀形式:
int
&
int
::
operator
++
()
// 这里返回的是一个引用形式,就是说函数返回值也可以作为一个左值使用
{
// 函数本身无参,意味着是在自身空间内增加1的
*
this
+=
1
;
// 增加
return
*
this
;
// 取回值
}
//后缀形式
:
const
int
int
::
operator
++
(
int
)
// 函数返回值是一个非左值型的,与前缀形式的差别所在。
{
// 函数带参,说明有另外的空间开辟
int
oldValue
=
*
this
;
// 取回值
++
(
*
this
);
// 增加
return
oldValue
;
// 返回被取回的值
}