1.如果 num 为真,则 !num 为假
if(num) //num为真,则执行if里面的语句
{
...
}
if(!num)//!num 为真,则执行if里面的语句
{
...
}
2. sizeof 是一个操作符,不是函数,最直接的证明方法是 sizeof(a)可以写成 sizeof a,如果sizeof是函数,那么()是函数引用操作符,是不能省略的
sizeof括号中的表达式不参与计算,因为根本没必要计算,等号右边的式子结果最终一定是等号左边的字节数
#include <stdio.h>
int main()
{
int a = 2;
char s = 0;
printf("%d
",sizeof(s = a + 2));
printf("%d
",s);//这里s打印出来一定0,因为上式中的sizeof(s = a + 2)里面的
s = a + 2的等号右边根本就没有参与计算,因为a + 2就算算出了
结果也会转化成char类型,char类型就是1个字节,所以计算机没有计算
return 0;
}
3.指针的大小要么是4字节,要么是8字节,why?
针对32位操作系统,理论上可以表示2^32个数,如果给每个数一个地址,理论上需要2^32个地址,而地址的形式是统一的,这就需要选择一个合适位数的地址,32位的地址刚刚好合适,大小就是4个字节;64位操作系统也是这个道理
4.~为按位取反操作符,是对一个数的二进制按位取反
5.左移操作符<< 右移操作符>>不是一次性只能移动一位
char i = 10;
i = i << 5;//这么写一点毛病也没有
i = i >> 5;//这么写一点毛病也没有
6.scanf 为进行一次字符读取
int i = 0;
scanf(“%d”,&i);//进行一次字符读取,读取的是整型,放在i中
int i = 0;
while(scanf("%d",&i) != EOF)//无限次读取字符,每一次都是读取一个整型放在i中,
读完一次后执行{}里的语句,接着再读取一次,再执
行一次{}的语句,直至出现scanf读取不到字符返回
EOF结束循环;如果压根就没有输入,则读取一次字
符返回EOF,然后跳过{}
{
}
7. a++ 、++a
a++ //先使用a,在a+1赋值给a
++a //先给a加1,再把 a加1 赋值给a
8.字符串比较用 strcmp
9.结构体成员
10. \0 的ASCII码值是0,NULL的ASCII码值是0,空格的ASCII码值是32,EOF的ASCII码值是-1