1、转义字符:\n换行,\t前进一个tab键,\b退格键
2、八进制前面有0,%o或者%#o表示八进制,十六进制前有0X,%0x或者%#0x表示十六进制
3、%u打印无符号数,%g显示小数,类似于%f,但%g后面不补0
4、sizeof输出总的字节数,strlen输出字符串长度(结尾的空字符不算在内)
5、Scanf 在遇到空格或者换行符停止读取,空格或换行符会留在输入流中等待读入语句处理,为避免这种情况可用gets()。gets和getchar都会读入换行符
void mian()
{
int ch;
While((ch=getchar()) != ‘y’)
{
While((ch=getchar()) != ‘\n’)
{
putchar(ch);
}
}
}
getchar每次读取一个字符,输入abc回车后,第一个while循环中的getchar先读取a赋值给ch,判断和’y’不相等进入第二个while循环,内循环的getchar继续读取一个字符b赋值给ch,此时ch里面的值已经由a跟新为b,判断不是回车符输出b,内循环还未结束,getchar继续读取下一个字符c与回车符比较,不等输出c,继续读取回车符,这时相等,结束内循环来到外循环
6、不能对未初始化的指针赋值,如int *pt; *pt=5;
当创建一个指针时,系统只分配了用来储存指针本身的内存空间,并不分配用来储存数据的内存空间,因此在使用指针前,必须给它赋予一个已分配的内存地址,比如把一个已存在的变量的地址赋给指针,或者使用malloc函数来分配内存。
7、m=3.14;
%8.3f 空空空3.140
%-8.3f 3.140空空空
8、二位数组
arr[][]
a==&a[0]== &&a[0][0]
a[0] == &a[0][0]
a+1==&a[0]+1==&a[1]
*(a+i) == a[i] == &a[i][0]
*(a+i)+1==&a[i][0]+1==&a[i][1]
*(*(a+i)+j)==a[i][j]
int arr[4][2]={{2,4},{6,8},{1,3},{5,7}};
int (*arr1)[2]=; //arr1指向一个包含两个int值的数组的指针,arr1相当于二维数组arr[][]的arr
arr1=arr;
*arr1[0]==*arr[0]==*&arr[0][0]==2;
arr1[2][1]==3;
函数中声明一个二位数组时可以void fun(int arr[][4])或者void fun(int(*a)[4])
9、extern关键字引用不在同一个文件中的变量或者函数
$1:
int main()
{
extern int num; //引用其他文件变量
extern void fun(); //引用其他文件函数
fun();
Printf(“%d”,num);
Return 0;
}
$2:
#include <stdio.h>
int num = 5;
void fun()
{
Printf(“被其他文件引用”);
}
$1中定义了extern,如果想要引用$2中的变量,那$2中的变量必须是全局变量
10、对一个常量指针无法做修改,如char *arr =”abdec”; 若arr[0]=’b’;
则会报错