1.标识符
标识符由字母(A-Z,a-z)、数字(0-9)、下划线“_”组成,并且首字符不能是数字,但可以是字母或者下划线。
2.strlen和sizeof的区别
sizeof会计算字符串中末尾的' ',而strlen不会。
sizeof作用于字符数组的时候,表示的是字符数组的长度(字节数)
如 char [15] a; sizeof(a) //值为15
sizeof作用于指针的时候,表示的是指针变量所占的字节数。
如 char *a; sizeof(a) //32位机中值为4,64位机中值为8
3.数组初始化
多维数组除了第一维可以为空外,其他不能为空,并且若有维度为空,必须声明的时候就初始化
char a[]="abc"; //sizeof长度是4,末尾会自动补‘/0’
char b[]={'a','b','c'}; //sizeof长度是3,末尾不会自动补‘/0’
字符数组之间是可以比较大小的,按每个字符比较,这里a>b
数组的维数不能是变量,必须是常量,但是C++中可以是变量
int a[][3]={1,2,3,4,5,6,7,8,9} 等价于int a[3][3]={{1,2,3},{4,5,6},{7,8,9}};
4.字符数组赋值
字符数组只能在初始化的时候用字符串赋值 。
char a[10]; a="ABCED"; //不合法
char *a="ABCD"; //编译可以通过,但是有时候C编译器没有申请内存的时候会出错
char *a; a="ABCDE"; //正确
char *s; scanf("%s",s); //错误,指针没有初始化
char s[10] scanf("%s",s); //正确,因为编译器会给s[10]分配内存空间,即它有地址
5. in a[10],int *p=a; *p++是值++还是指针++?
指针++,因为++作为后缀的优先级比*高一个大级别,++作为前缀也比*高(在同一级别)但是*++p或者++*p的结合顺序都是从右到左,所以不需要考虑优先级。
6.声明指针会不会被初始化?
会,但是指向的是低地址,如00000000,或00000001,编译的时候能够通过,但是运行的时候可能会出错,因为这些地址是操作系统内核占用的地址,是不能修改或读的,修改或者读会导致程序发生中断。
7. char **p[10]、char *(*p)[10]、char (**p)[10]的区别:
需要注意的是 [ ] 的优先级是要比 * 高的,因此char **p表示的是一个存有10个二维指针的数组,p是这个数组的地址
而加了括号以后char (**p)[10],中,**先与p结合,因此char (**p) [10],表示一个指向含有10个char元素的二维指针
char *(*p)[10] 呢? 只有一个*和p结合,相当于一个一维指针,char *(*p)[10]表示一个指向有10个char * 元素的数组的指针。
8.转义字符
c语言中的转义字符由 或者 x 和数字构成,其中 加八进制数字,最多三位,最大取值为177。 x加十六进制,最多2位 ,最大取值为7f
9.C语言中字符串常量相减 ,如"FLOWER"-"FLOW"实际上是字符串常量的地址相减
10.c语言中的stdin和stdout
11.堆的插入操作
12.排序算法