2019/11/15 C语言新识(1)

1、‘0’、‘\0’、0、“0”的区别
①    ‘0’    代表    字符0  ,对应ASCII码值为   0x30 (也就是十进制 48)
②    '\0'    代表     空字符(转义字符)【输出为空】, 对应ASCII码值为   0x00(也就是十进制 0), 用作字符串结束符
③     0    代表     数字0,  若把 数字0 赋值给 某个字符,对应ASCII码值为    0x00(也就是十进制0) 
④     “0”  代表    一个字符串,  字符串中含有 2个字符,分别是 '0' 和  '\0' 
 
常见的数组初始化如char[128] = {0} ={'\0'},绝对不能等于{'0'}
 
2、内存对齐
第一条:第一个成员的首地址为0
第二条:每个成员的首地址是自身大小的整数倍
       第二条补充:以4字节对齐为例,如果自身大小大于4字节,都以4字节整数倍为基准对齐。
第三条:最后以结构总体对齐。
        第三条补充:以4字节对齐为例,取结构体中最大成员类型倍数,如果超过4字节,都以4字节整数倍为基准对齐。(其中这一条还有个名字叫:“补齐”,补齐的目的就是多个结构变量挨着摆放的时候也满足对齐的要求。)
typedef struct MemAlign  
{  
char a[18];  
 double b;     
 char c;  
 int d;    
 short e;      
}MemAlign; 
 
大小:40
 
3、递归函数中,位于递归调用语句后的语句的执行顺序和各个被调用函数的顺序相反.
 
4、换行符:\
(1.换行的标识是"\"。
 
(2.针对一般语句换行使用\结尾作为换行标记,在编译时,\后面的将被忽略,当做一行处理。比如:
#define my_puts(x) printf("%s", \
x);
和#define my_puts(x) printf("%s",x);是没区别的。
 
(3.针对执行语句的换行,我们同样可以使用\作为换行符,同时当一个语句过长时,直接换行,也并不会影响语句的编译,比如:
if(NULL != input\
&& TRUE == input->state)
if(NULL != input 
&& TRUE == input->state)
相同,它们所表达的都是
if(NULL != input && TRUE == input->state)
 
(4.值得注意的是,针对字符串换行,需要注意换行后的内容顶格写,如果采取缩进方式的话,开头的空格也会被计算进字符串中。比如:
printf("Hello \
world\n");
此处我们输出的将会是:Hello     world 也就是会将world前面的空格计入字符串中去。

猜你喜欢

转载自www.cnblogs.com/epll/p/11869998.html