c语言碎片知识

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.排序算法

原文地址:https://www.cnblogs.com/foodie-nils/p/13726501.html