7.3 sizeof关键字
来源:互联网 发布:mysql默认引擎 编辑:程序博客网 时间:2024/06/15 14:05
7.3.2 strlen和sizeof
strlen是从内存某个位置开始扫描,直到\0截止的字符个数。strlen("\0")==0;
sizeof是 C语言关键字,以字节形式返回操作数的存储大小。
操作数可以是表达式或在括号里的类型名,存储大小根据类型决定。
strlen和sizeof的区别:
1.strlen是函数,sizeof后面是类型名加括号,是变量则不需加括号。
2.sizeof的结果是size_t,在头文件中被 typedef为unsigned int,能够保证容纳所建立的最大对象的字节大小。
3.数组名作为sizeof的参数时,不退化为指针,得到的是数组整体的大小。
4.大部分sizeof是在编译器期间计算出来的,strlen则全是在运行期间。
5.strlen只能用char*做参数,必须以\0结尾。
6.通常C语言写法:
fun(unsigned char* i,int length){
unsigned char*buf =new unsigned char[length+1];
memcpy(buf,i, len);
buf[length+1]='\0';
}
注意:指针sizeof通常为4B。
7.3.3对于结构体,为什么sizeof返回值要一般大于期望值
struct的sizeof是所有成员对齐后的结果,union 是取最大成员长度。
struct安装成员被声明的顺序分配内存地址,并且运用 字节对齐,即在可接受的空间浪费下,提高cpu读取速度。因为cpu每次读取一个32位(64位,机器字长)。
通过三种方法可以改变对齐字节:
1.#pragma pack(n)按n字节对齐。
2.#pragma pack()取消对齐
3._attribute((aliged(n))),按n对齐。
最小化结构体,根据最大的成员长度,进行声明顺序调整。比如 short,short,int只占8字节,而short,int,short占12字节。
常见的char,short ,int,float,double占1,2,4,4,8;
7.3.4指针强制转换后与地址加法运算,结果是?
注意:指针指向同一数组,可以相减,得到相差距离,如&a[8]-&a[0]=8;
书中例子所示,struct BBB*p;p+1实际就是p地址+1*sizeof(BBB);p+0x200==p+0x200*sizeof(BBB)==p+0x200*24;
(char*)p+0x200==p+0x200*4;
(long)p+0x200已经变成数字运算了。
- 7.3 sizeof关键字
- 关键字----sizeof
- sizeof关键字
- sizeof关键字
- sizeof关键字
- sizeof关键字
- sizeof 关键字
- Sizeof 关键字
- sizeof关键字
- sizeof关键字
- 关键字--sizeof
- 数组与关键字sizeof()
- 关于sizeof关键字用法
- sizeof关键字学习(转载)
- c关键字-[sizeof]
- C关键字sizeof
- sizeof与const关键字
- sizeof关键字详解
- memset实现
- R语言学习-线性回归
- PL/SQL 设置登陆数据库的 配置文件 tnsnames.ora(oracle文件)
- 6条网页设计配色原则
- MySQL: 修改(windows系统下)mysql默认连接数的方法
- 7.3 sizeof关键字
- poj1840Eqs(哈希判重)
- 小黑小波比.Ubuntu下的截图
- JavaScript与Java通信
- 父亲的爱
- 【贯明专栏】不以物喜 不以己悲
- 然而有一次,夜里醒来
- “吃好了没?”他看着我问道。
- Visual Studio:error MSB8020