赋值 *** 作的优先级较低,仅高于逗号运算符。
基本赋值 =如 int a=5; 表示把 5 赋值给整型变量 a,不能读成 “a等于5”。赋值号左边必须为左值,赋值号右边的右值可以为常量、变量或表达式。如下赋值均是正确的。
int a,b; //定义整型变量a和ba=3; //把常量3赋值给a,右值为常量b=a; //把变量a的值赋给b,右值为变量b=a+3; //把求和表达式a+3的值赋给b,右值为表达式以下赋值均是错误的。
int a=2;3=a; //错误,常量3不能作为左值const int b=5; //定义整型常变量只读变量b,并初始化为5,其值不能被改变b=1; //错误,企图改变常变量的值,即常变量不能作左值复合赋值:+=、-=、*=、/=、%=a+=b; 等价于 a=a+b;
a-=b; 等价于 a=a-b;
a*=b; 等价于 a=a*b;
a/=b; 等价于 a=a/b;
例如:
int a=5;a+=3; //等价于 a=a+3;由于赋值运算符的优先级很低,仅高于逗号运算符,故最后做赋值 *** 作。
a+=3+2; 等价于 a=a+(3+2);
通过下面的例子,掌握上述 4 种复合赋值运算符。
【例 1】分析以下程序,输出其运行结果。
#include<stdio.h>int main (voID){ int a=l,b=2,c=3; //定义三个整型变量,并初始化 float d=10.2f; //定义float变量d,用浮点常量10.2初始化 a+=1; //相当于 a=a+1;即 a=1+1=2 b-=a+5; c*=a-4; printf ("%d,%d,%f",a,b,c,d/=a); return 0;}代码分析:
1) float d=10.2f; 如果改为 float d=10.2; 虽然没有语法错误,可以正常运行,但一般编译器会提示 warning(警告),原因是编译器会把 10.2 等常量默认当成 double 型常量处理,与 d 的类型 float 不一致,故出现警告。因此可通过加 f 明确 10.2 为 float 型常量。
2) a+=1; 相当于 a=a+1; 求出 a 为 2。
3) b-=a+5; 由于赋值运算符的优先级低于算术求和运算符,故该语句等价于 b=b-(a+5);,即 b=2-(2+5);,得 b=-5;。同理,c*=a-4; 即 c=3*(2-4);,故 c=-60
4) printf("%d,d/=a); 由于输出列表中 a、b 和 c 均为 int 型变量,故输出格式占位符均为 %d;输出列表中第 4 项为表达式,其表达式的值为 d=d/a=10.2f/2=5.1,为浮点类型,输出格式占位符为 %f,在 VC++ 6.0 环境中,float 类型为小数点后保留 6 位数字。
运行结果为:
2,-5,-6,5.100000
总结
以上是内存溢出为你收集整理的赋值运算符及赋值表达式,C语言赋值运算符及其赋值表达式详解全部内容,希望文章能够帮你解决赋值运算符及赋值表达式,C语言赋值运算符及其赋值表达式详解所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)