sizeof会将空字符0计算在内,而strlen不会将空字符0计算在内; 2、sizeof会计算到字符串最后一个空字符0并结束,而strlen如果遇到第一个空字符0的话就会停止并计算遇到的第一个空字符0前面的长度。
strlen 是一个函数,它用来计算指定字符串 str 的长度,但不包括结束字符(即 null 字符) 关键字 sizeof 是一个单目运算符,而不是一个函数。与函数 strlen 不同,它的参数可以是数组、指针、类型、对象、函数等
在程序中使用static
变量
局部变量
普通局部变量是再熟悉不过的变量了,在任何一个函数内部定义的变量(不加static修饰符)都属于这个范畴。编译器一般不对普通局部变量进行初始化,也就是说它的值在初始时是不确定的,除非对其显式赋值。
普通局部变量存储于进程栈空间,使用完毕会立即释放。
静态局部变量使用static修饰符定义,即使在声明时未赋初值,编译器也会把它初始化为0。且静态局部变量存储于进程的全局数据区,即使函数返回,它的值也会保持不变。
4、全局变量
全局变量定义在函数体外部,在全局数据区分配存储空间,且编译器会自动对其初始化。
普通全局变量对整个工程可见,其他文件可以使用extern外部声明后直接使用。也就是说其他文件不能再定义一个与其相同名字的变量了(否则编译器会认为它们是同一个变量)。
静态全局变量仅对当前文件可见,其他文件不可访问,其他文件可以定义与其同名的变量,两者互不影响。
在定义不需要与其他文件共享的全局变量时,加上static关键字能够有效地降低程序模块之间的耦合,避免不同文件同名变量的冲突,且不会误使用。
函数
函数的使用方式与全局变量类似,在函数的返回类型前加上static,就是静态函数。其特性如下:
静态函数只能在声明它的文件中可见,其他文件不能引用该函数
不同的文件可以使用相同名字的静态函数,互不影响
非静态函数可以在另一个文件中直接引用,甚至不必使用extern声明
5、原码反码补码的在线转化。(整数在数据中的储存方式是补码,所以如果要进行运算的话,那就需要将原码转换为补码再计算)字符型数据在文件中的存储形式是ASCII码
负数的转化流程
正数在内存中的储存情况就是原码,因为正数的原码反码补码都一致。
6、
7、运算符优先级
原型声明:extern char *strcpy(char *dest,char *src);
功能:把src所指由NULL结束的字符串复制到dest所指的数组中。
返回指向dest的指针。
原型:extern char *strcat(char *dest,char *src);
功能:把src所指字符串添加到dest结尾处(覆盖dest结尾处的'\0')并添加'\0'。
所以按照执行顺序,strcpy(str1,str2),就是将str2复制给str1,并返回str1,而strcat意思是把两个串连起来,strcat(strcpy(str1,str2),str3)说白了就是把str2和str3连接起来
假定int类型变量占用两个字节,若有定义:int x[10]=0,2,4);,则数组x在内存中所占字节数是20