<左值>∷=<标识符> 被赋变量 <左值表达式]数组元素 <左值><标识符>结构或联合成员 <左值>><标识符>同上 (<左值>) *<表达式> 指针变量,取指针所指对象作为被赋 变量 从上可以看出,一般只有变量、数组元素、结构成员才能做为左值 第二章数据、运算符、表达式
第二章 数据、运算符、表达式 <左值> ::= <标识符> 被赋变量 | <左值>[<表达式>] 数组元素 | <左值>.<标识符> 结构或联合成员 | <左值>-><标识符> 同上 | (<左值>) | *<表达式> 指针变量,取指针所指对象作为被赋 变量 从上可以看出,一般只有变量、数组元素、结构成员才能做为左值
1.单目表达式 由单目运算符构成的表达式,格式为: <单目运算符<运算对象 <单目表达式>∷=*〈表达式) 取指针所指对象内容 &<左值> 取变量地址 <表达式> 单目减 +<表达式> 单目加 ~<表达式> 按位反 表达式> 逻辑反 (<类型名>)<表达式> 强制类型转换 I sizeof<表达式> 数据类型的大小,以字节计 I sizeof(<类型名>) 同上 ++<左值>|-<左值> 前置增/减量 <左值>+|<左值> 后置增/减量 第二章数据、运算符、表达式
第二章 数据、运算符、表达式 1. 单目表达式 由单目运算符构成的表达式,格式为: <单目运算符> <运算对象> <单目表达式> ::= *〈表达式〉 取指针所指对象内容 | &<左值> 取变量地址 | -<表达式> 单目减 | +<表达式> 单目加 | ~<表达式> 按位反 | !<表达式> 逻辑反 | (<类型名>)<表达式> 强制类型转换 | sizeof <表达式> 数据类型的大小,以字节计 | sizeof (<类型名>) 同上 | ++<左值> | --<左值> 前置增/减量 | <左值>++ | <左值>-- 后置增/减量
例1]指针和地址 Int pX Y:10 01000 &x y=*px;(间接取,相当于y=x) 指针变量用来存放所指对象的地址 注意: 只有<左值>才能取地址,即变量或数组元素能取地址。所以,&(3 &(x+5)等非法。 只有<左值>才可对它进行艹+或一运算。 第二章数据、运算符、表达式
第二章 数据、运算符、表达式 [例1] 指针和地址 int x, y; int *px; x= 10; px = &x; y = *px; (间接取,相当于y = x) 指针变量用来存放所指对象的地址。 注意: - 只有<左值>才能取地址,即变量或数组元素能取地址。所以,&(3), &(x+5)等非法。 - 只有<左值>才可对它进行++或—运算。 X: 10 Y: 10 01000 PX:
[例2]前置和后置增(减)量 n X=++n; X=n++: 结果:f:6,x:6 结果:x5,n:6 前置运算是先进行增减量,再取其值。 后置运算是先取其值,再进行增减量运算 第二章数据、运算符、表达式
第二章 数据、运算符、表达式 [例2] 前置和后置增(减)量 n = 5; n = 5; x = ++n; x = n++; 结果: 结果: •前置运算是先进行增减量,再取其值。 •后置运算是先取其值,再进行增减量运算。 n? ? :6, x: 6 x: 5, n: 6
例3]给出下列程序的输出结果 #include <stdio. h> main( Int a=b=c=0; a=++b+++c; printf( - %d %d%dn, a, b, c); /*211* a=b+++c++: printf("%d%d%dn, a, b, c); /222*/ a=++b+c++: printf(%d%d%dn,, a, b, c); /533*/ a=b-+-c; printf( %d%d%dn", a, b,c) /522* a=++c+c: printf("%d %d%din, a, b, c); 不确定,取决于机器实现 第二章数据、运算符、表达式
第二章 数据、运算符、表达式 [例3]给出下列程序的输出结果 #include <stdio.h> main( ) { int a, b, c; a = b = c = 0; a = ++b + ++c; printf(“%d %d %d\n”,a, b, c); a = b++ + c++; printf(“%d %d %d\n”,a, b, c); a = ++b + c++; printf(“%d %d %d\n”,a, b, c); a = b-- + --c; printf(“%d %d %d\n”,a, b, c); a = ++c + c; printf(“%d %d %d\n”,a, b, c); } /* 2 1 1 */ /* 2 2 2 */ /* 5 3 3 */ /* 5 2 2 */ /* 不确定,取决于机器实现 */