(表达式1, 表达式2, 表达式3....);
#include <stdio.h>
int main() {
int i = 0;
i = 1, 2, 3, 4, 5;
return 0;
}
这段代码,你认为i的值应该是多少?0,1还是5?如果不明白,你往前面五行文字看。
C语言随机数函数
这里区别于指针的++和--, --(++)变量 表示变量先-1(+1),再返回表达式的值。若运算符在变量后则表示先使用变量,然后变量-1(+1)。
#include <stdio.h>
int main()
{
int a = 1;
int b = 1;
printf("a++: %d\n", a++);
printf("++a: %d\n", ++a);
printf("a--: %d\n", a--);
printf("--a: %d\n", --a);
a = 0,b = 0;
printf(" %d %d %d \n",(b++)+a, a++);
printf("a:%d, b:%d\n", a,b);
return 0;
}
a++: 1
++a: 3
a--: 3
--a: 1
1 0 1
a:1, b:1
分析:第七行:先返回a的值,然后再进行a=a+1运算 因此输出1,a的值已经变成2了,
第八行:先进行a=a+1赋值,所以得到a的值是3,此时将结果返回,所以打印输出3,
那么第10,11行同理。
第14行呢,我之前说过printf的顺序,从坐往右依次分别计算(b++)+a, 然后是a++,所以先看前面的表达式,b++在括号里运算符优先级较高,因此b++相当于是先返回b的结果0,然后再b=b+1,此时b已经变成1了, 那么(b++)+a之后就是1, 再看后边的表达式,a++,相当于返回a的值0再给a+1,此时a的值变成1了,所以15行打印的a和b的值都是1。
&&,表示两边的条件都成立才返回真,什么意思呢,比如有个A&&B,实际上程序是先走A,如果A成功了再执行B, 如果A返回假,那么B就不会再执行了。
||,表示两边有一个条件成立就行, 比如 A||B 实际上程序是先走A,判断为真了,就不执行B了,如果A为假才会执行B。
!,表示相反,不解释了。
不要嫌弃高司机的话多,这里我给你一段代码,检查下自己是否已经掌握了:
#include <stdio.h>
int main()
{
int a = 1;
int b = 1;
if( a++ > 1|| ++b >= 1)
{
puts("test 1");
}
printf(" a:%d b:%d\n",a, b);
a = b = 1;
if( ++a > 1 && ++b > 1 )
{
puts("test 2");
}
printf(" a:%d b:%d\n",a, b);
a = b = 1;
if( ++a > 2 && ++b > 1 )
{
puts("test 3");
}
printf(" a:%d b:%d\n",a, b);
return 0;
}
运行结果:
test 1
a:2 b:2
test 2
a:2 b:2
a:2 b:1
有人听到sizeof是运算符可能会大吃一惊,实际上在我开始学习C的时候,误认为sizeof是个函数。
那么sizeof怎么用,你可以 sizeof(变量名) ,sizeof(类型),sizeof 类型
#include <stdio.h>
int main()
{
int a = 12;
float b=12.0;
printf(" a:%d b:%d\n", sizeof a, sizeof b);
printf(" NULL:%d\n", sizeof NULL);
return 0;
}
你算下结果是不是和你想的一样,如果不一样,为什么呢,如果有不明白的可以在留言板或者聊天频道给我留言哈。高司机对粉丝是很有耐心的。
关于sizeof的更多用法,我将会在指针以及结构体部分渗入,你会感受到sizeof的无限乐趣。
#include <stdio.h>
int main()
{
int a = 8;
int b = 5;
printf("%d\n", a & b);
return 0;
}
#include <stdio.h>
int main()
{
int a = 8;
int b = 5;
printf("%d\n", a | b);
return 0;
}
#include <stdio.h>
int main()
{
int a = 8;
int b = 5;
printf("%d\n", a ^ b);
return 0;
}
#include <stdio.h>
int main()
{
int a = 8;
// 相当于8*(2的2次方) = 8*4 =32
printf("%d\n", a << 2);
return 0;
}
说到这里,如果你有一些复杂运算,是不断乘以或除以2,那么你其实可以考虑使用位运算更快捷。
#include <stdio.h>
int main()
{
int a = 32;
// 相当于32/(2的2次方) = 32/4 =8
printf("%d\n", a >> 2);
return 0;
}