1) #define setzero(a,n) a&=~(1<<n) 宏定义将n位制零
#define setone a|=(1<<n) 宏定义把n位制1
2) #define isset(a,n) (a)&(1<<(n)) 判断n位是不是1
3) int 型交换变量(注意a与b不能有相等的情况)
a=a^b;
b=a^b;
a=a^b;
4 )刷新缓冲区#include<string,h>
while(fflush(stdin),memset(s,0,sizeof(s)),scanf("%d",&a));
当输入从无数据时造成死循环,因为错误数据一直在缓冲区
5)结构体定义的时候用.来指内部变量,结构体定义指针用->来指内部变量
6) string to int ::::sum=sum*10+str[i]-'0';
7) char *p 只想地址是只读的
strcpy(p,"world")这是错的
char str[] 这个是可写的
b[5]=*(b+5) = *(5+b)=5[b] 这都是一样的
8) int *p=NULL ; *p是地址p上的一个int型的值=0,p的地址有cpu分配
*p=1 不对,*p=a,对
9) arr=(int *)calloc(10,sizeof(arr)); 相当于 arr(int *)malloc(10*sizeof(arr)); memset(arr,0,sizeof(arr));
10) 定义指针后都是只读的,因为地址的内容是受系统保护的,想要将自己定义的指针所指向的内容赋值
必须自己开辟地址空间arr=(int *)calloc(10,sizeof(arr));
11) stdin是file*类型的,文件指针,默认从键盘读入?????????????
FILE *fp fp是指file类型的文件头指针
#define FILE_READ "D:\The_Holy_Bible.txt"定义路径
fp=fopen(FILE_READ(文件名),"wb" 或 “rb”(使用文件的打开方式)) 指明路径,读文件的时候就可以用fscanf(fp,"%d%s%d");
fclose()
char ch = fgetc();从文件得到一个字符
标准输入流是stdin
fscanf(fp,"%d%s%d");
fscanf(stdin,"%d%s%d");=scanf("%d%s%d");
fprintf(stdout,"%d%s%d");=printf("%d%s%d");
12)char line[1024];
while(memset(line,0,sizeof),fgets(line,1024,fp)!=NULL) 将fp所指向的文件整行考入line中
int srone_cnt = sscanf(line,"%d%d%d%d%d",&id,&,&,&);将line中的数俺格式取出,srone_cnt放取了几个%d,用于判断每一行int的个数不确定的情况
fprintf(fp,"%d%d",id,n); 将数据按照这个格式放入fp所致的文件
fread 整块读,用fwrite整块写,必须的用fread进行读
13) 建立二维动态数组,之中size自己定义大小,所以是动态数组,假如int n; int a[n],这就不对
int **arr;
arr=(int **) calloc (size,sizeof(int *));
for(index=0;index<size;index++){
arr[index]=(int *)calloc(1,sizeof(int));
}
释放二维动态数组,就释放头指针?
for(index=0;index<size;index++){
free(arr[index]);
arr[index]=NULL;
}
free(arr);
14)int *p=NULL ;*p=1;(错) *p=a(对)
当指针指向空是,不能更改该地址所对应的空间的值,受系统保护的, 可以让p指向一个变量的地址