操作
~scanf()和scanf()!=EOF效果相同
scanf的返回值是输入值的个数
如果没有输入值就是返回-1
-1按位取反结果是0
EOF值为-1
数组传参习惯加上断言 assert(arr)
头文件<assert.h>
使用getchar()清除缓冲区
getchar()读取到EOF就结束读取(CTRL+Z)相当于EOF
输入函数是从缓冲区去拿,键盘输入缓冲区
srand((unsigned int)time(NULL));
printf("%d",rand()%100);
必须放到主函数
打印0-99的随机数(任何数%100都是0-99的数)
printf("%*.*s\n",m,n,ch);
前边的*定义的是总的宽度,后边的定义的是输出的个数。分别对应外面的参数m和n 。
这种方法的好处是可以在语句之外对参数m和n赋值,从而控制输出格式。
#define INT_PTR int*
typedef int* int_ptr;
INT_PTR a,b;
int_ptr c,d;
以上代码只有b不是指针类型
int*a,b
==int*a
;int b
(#define是替换,只有a与*结合)
而对于c和d(typedef是重定义,a,b都变为指针类型)
(a+b)/2
和a+((b-a)>>1)
等价
注意点
越界不一定会报错
,系统对越界的检查是一种抽查,即对数组设置标志位
,越界读
一般无法检查,越界写
如果修改到标志位才会检查报错