1、转义字符,转义字符应该看成是一个整体(在字符串里也是结合在一起)
例:char *s=" \ta\018bc " 共 \t a \01 8 b c 共6个字符
2、用 %d %x 也可以打印指针变量的值,d打出来是十进制的x打出来的是16进制;
地址本身也是用16进制表示( %p )
3、strcpy( 函数 ) :( str01, str02) 将2的内容拷贝到1中
1、当1中没有内容且空间足够时,能够将2的内容全部接受,注意拷贝的时候会将 ' \0 '也拷贝进去,如果空间不够可能拷贝不了反斜杠0,strncpy ( str01,5,str02) 这时其实只能从2中拿4个字符还有一个是' \0 '
2、当1中有内容但比2内容短时,1中的内容会全部被覆盖;
3、当1中有内容且比2中长时,会覆盖2的字符数加1个字符(' \0 ')
4、还可以指定从哪个位置开始拷贝覆盖
本题中第一步结束后变为 Afgh\0FG fgh将BCD覆盖,' \0 '将E覆盖
第二步变为Afgd\0FG 注意本题中字符串2比1短,所以1中最后的FG还在,只是前面 有反斜杠0读不到
这道题先拷贝函数,然后welcome就变成 Hello\0e,strlen读取长度的时候遇到反斜杠0会停止,后面的e就读不到,而且反斜杠0也不会被统计在字符串长度中,这时如果用sizeof( str ) 会为 8
4、指针的运算
本题中 s1指向1,s2指向7, 然后t=1,s1指向2;s1指向的2变为s2指向的7,s2再指向下一个6;
然后s2指向的6就变为t也就是1,一轮循环下来字符串就变为1734517,在不断循环最后就得到1711717
5、定义指针时如果没有初始化指针定向,那是不能给p的内容赋值的,因为p没有指向地址,没有空间去存储,但是可以去指向一个字符串的首地址
6、结构体的对齐
结构体开辟空间时是按其成员中占用最大空间的类型为基本单位开辟,最后开辟的空间应是基本单位的整数倍,联合体也是按最大类型为基本单位开辟,但其只要能放入最大成员即可,所有成员共用同一片内存,但结构体是每个成员都有自己的内存保存
其开辟空间也是按成员顺序依次开辟,本题中先开3个8字节的存储name, 然后剩了4个字节放不下longint,因此会再新开8个字节存储,前面剩的4字节就舍弃了,然后再开2个8存储score
如果题中将score[ 4 ]变为3,再移到第二位,结果就为40,会把那4个字节利用