左值
可以出现在表达式左边的值(等号左边),可以被修改,它是存储数据值的那块内存的地址,也称为变量的地址
右值
存储在某内存地址中的数据,也称为变量的数据
!左值可以作为右值,但右值不可以是左值
本题不合法
a++不能当做左值使用,++a可以当做左值使用。++a表示取a的地址,对他的内容进行加1操作,然后把值放回寄存器中,a++表示取a的地址,把它的值装入寄存器,然后再对内存中的a执行加1操作。a++的运算结果并不是a变量的引用,而是一个临时变量,其值为i的值,故无法进行上述(a++)+= a运算,甚至编译器不允许对一个临时变量重新赋值,会引起编译错误
(++i>0)|| (++j>0)的短路求值
|| 运算符先算左边,如果左边成立右边不会计算
&& 运算符如果左边为0 右边也不计算所以叫短路求值
void Func(char str_arg[2])
{
printf("%d", sizeof(str_arg));
printf("%d", strlen(str_arg));
}
int main()
{
Func(str);
}
此代码结果是4 5 ,原因是 在函数参数中char str_arg[2]相当于一个char* 指针类型
数组名隐式转换成了指针类型