sizeof and strlen整理
sizeof
- 定义
- 计算对象或类型所占用的字节数(byte)
- 记住是字节数,而不是个数
- 计算对象或类型所占用的字节数(byte)
- 语法
- sizeof(对象)
- int i; sizeof(i);
- sizeof(类型)
- sizeof(int);
- sizeof 对象
- int i; sizeof i;
- sizeof(2);sizeof(2+3.14);
- sizeof()可以对一个表达式求值,但是它是根据表达式的类型进行求值。
- 相当于sizeof(int);sizeof(double);
- sizeof(function())
- sizeof()可以对一个函数调用求值,其结果是函数返回类型的大小,记住函数是不会被调用的。
- int function(); sizeof(function());//4
- 返回值类型是没有确定的函数,不能调用sizeof;
- void function(); sizeof(function());//error
- void function(); sizeof(function); //error
- sizeof(对象)
- sizeof的常量性
- sizeof的计算发生在编译时刻
- 基本数据类型的sizeof
- 32位和64位机器的最大区别
- 32位机器:指针代表寻址空间, 32位的寻址空间是2^32, 即32个bit,也就是4个字节
- 64位机器,很显然就是8个字节
- 所以sizeof(指针),32位得4bytes,64位得8bytes,但是其他的基本数据类型是一致的,如sizeof(int)都是4个字节。
- 32位和64位机器的最大区别
- 数组的sizeof
- 静态分配的数组
- sizeof是编译时确定要处理的对象的真实内存大小(包括字符串的结束符)
- char a[] = "123"; sizeof(a); //4bytes,显然a的大小已经确定了,'1','2','3','\0'
- char a[20] = "123"; sizeof(a); //20bytes,显然a的大小也是确定的
- int a[20] = {1,2,3}; sizeof(a); //80bytes
- int a[] = {1,2,3}; sizeof(a); //12bytes
- 数组名作为实参传递给函数,那么对函数的形参会退化为指针
- int function(int a[],int* b, char c[],char* d)
- sizeof(a)、sizeof(b)、sizeof(c)、sizeof(d)都是指针的大小,4bytes
- sizeof是编译时确定要处理的对象的真实内存大小(包括字符串的结束符)
- 动态分配的数组
- 很显然,动态分配的数组在编译时是无法知道数组的大小
- n待输入;int* a=new int[n];sizeof(a); //4
- 所以对于动态分配的数组sizeof将转换为对指针的sizeof
- 很显然,动态分配的数组在编译时是无法知道数组的大小
- 静态分配的数组
- 指针--该指针指向字符数组
- char *a = "12345"; sizeof(a); //4
- 上述和char b[] = "12345"还是有区别的,sizeof(b) //6
- 结构体的sizeof
- sizeof求得的结构体(及其对象)的大小并不等于各个数据成员对象的大小之和!
- 结构体的大小等于结构体内最大成员大小的整数倍
- 结构体内的成员的首地址相对于结构体首地址的偏移量是其类型大小的整数倍
- 为了满足规则1和2编译器会在结构体成员之后进行字节填充!
- sizeof求得的结构体(及其对象)的大小并不等于各个数据成员对象的大小之和!
struct A{
int num1;
int num2;
double num3;
};
struct B{
int num1;
double num3;
int num2;
};
- 定义
- 返回字符串的长度。
- 从字符串的第一个字符开始遍历,直到遇到结束符NULL。返回的长度不包括NULL。
- 运行时计算长度,这个sizeof刚好相反
- 静态字符数组
- char a[] = "123";strlen(a);//3,遇到NULL停止,不包括NULL
- char a[] = "";strlen(a);//0,不包括NULL
- char a[20] = "123";strlen(a);//3
- char* a= "123";strlen(a);//3
- 动态字符数组
- char *a = new char[20];strlen(a);//27
- 上述并不知道NULL的结尾,所以得到的长度每次运行都不一样。
- 静态字符数组
- 返回字符串的长度。
sizeof and strlen整理的更多相关文章
- sizeof、strlen、字符串、数组,整到一块,你还清楚吗?
写在前面 sizeof.strlen.字符串.数组,提到这些概念,相信学过C语言的人都能耳熟能详,也能谈得头头是道,但是,在实际运用中,当这些内容交织在一起时,大家却不一定能搞地清清楚楚,本文的目的正 ...
- sizeof和strlen的区别
一.sizeof sizeof(...)是运算符,而不是一个函数. sizeof操作符的结果类型是size_t,在头文件中typedef为unsigned int,其值在编译时即计算好了, ...
- Sizeof与Strlen的区别与联系
转自:http://www.cnblogs.com/carekee/articles/1630789.html 一.sizeof sizeof(...)是运算符,在头文件中typedef为uns ...
- Sizeof与Strlen的区别与联系(转)
Sizeof与Strlen的区别与联系 一.sizeof sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组.指针.类型 ...
- sizeof()和strlen()
sizeof计算的是栈中大小 P { margin-bottom: 0.21cm; direction: ltr; color: rgb(0, 0, 0); text-align: justify } ...
- sizeof 和 strlen 的区别
sizeof 和 strlen 都是c/c++ 中常见的符号,他们的功能是判断数组长度.那么他么到底有什么区别 1.sizeof 不是函数,而是一个操作符.字节数的计算在程序编译时进行,而不是在 ...
- C++-sizeof和strlen的区别
一.sizeof sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组.指针.类型.对象.函数等. 它的功能是:获得保 ...
- sizeof 和 strlen 区别
Sizeof与Strlen的区别与联系 一.sizeof sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组.指针.类型. ...
- sizeof()与strlen()的区别
首先需要说明的是sizeof和strlen都可以求长度,但是却有很大的区别,简单来说可以概括为以下几点: 1.sizeof是一个关键字,而strlen确实一个函数. 2.sizeof求的是字节长度,而 ...
随机推荐
- javascript高级程序设计阅读笔记(一)
javascript高级程序设计阅读笔记(一) 工作之余开发些web应用作为兴趣,在交互方面需要掌握javascript和css.HTML5等技术,因此读书笔记是必要的. javascript简介 J ...
- 分布式icinga2安装与使用
目标 配置分布式的icinga2监控系统.分布式监控适用于服务器遍布在多个区域,且需要一个master做统一管理. 搭建环境 服务器 系统: ubuntu 15.04/ubuntu 14.04 ici ...
- AngularJS Providers 详解
供应者(Providers) Each web application you build is composed of objects that collaborate to get stuff d ...
- mysql where执行顺序
where执行顺序是从左往右执行的,在数据量小的时候不用考虑,但数据量多的时候要考虑条件的先后顺序,此时应遵守一个原则:排除越多的条件放在第一个. 在用MySQL查询数据库的时候,连接了很多个过滤条件 ...
- paip.文件目录操作uAPI php python java对照
paip.文件目录操作uAPI php python java对照 chdir -- 改变目录 chroot -- 改变根目录 dir -- directory 类 closedir -- 关闭目录句 ...
- HTML5游戏开发进阶指南(亚马逊5星畅销书,教你用HTML5和JavaScript构建游戏!)
HTML5游戏开发进阶指南(亚马逊星畅销书,教你用HTML5和JavaScript构建游戏!) [印]香卡(Shankar,A.R.)著 谢光磊译 ISBN 978-7-121-21226-0 201 ...
- Codeforces Round #379 (Div. 2) 总结分享
前言 初入acm的新手,打算在cf混.这几天没有比赛,就做了个最新的Virtual participation.虽然说div2比较简单,但还是被虐得体无完肤...Orz.两个小时,共6道题.最后只AC ...
- SQLSERVER新建表的时候页面分配情况是怎样的?
SQLSERVER新建表的时候页面分配情况是怎样的? 再次感谢sqlskill网站和转载sqlskill网站文章并翻译的人,因为您们的转载和翻译让小弟又学习到新的东西o(∩_∩)o 文章中用到的工具: ...
- Win7快捷方式图标不显示解决办法
问题:WIN7的系统,桌面.开始菜单以及任务栏的快捷方式图标显示不正常,看不到程序默认图标,快捷方式图标不显示. 解决方法:删除程序图标缓存即可. 将下面的内容复制到记事本保存为“图标缓存清理.b ...
- ORA-00257: archiver error. Connect internal only, until freed——解决
参考http://www.2cto.com/database/201109/104615.html, 开启归档后,操作一个大表迁移表空间,执行了1个多小时没完成就手动给中断了,但是再次用plsql登陆 ...