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求的是字节长度,而 ...
随机推荐
- Xamarin.Forms入门-使用 Xamarin.Forms 来创建跨平台的用户界面
Xamarin.Forms 是一个跨平台的.基于原生控件的UI工具包,开发人员可以轻松的创建适用于 Android,iOS 以及 Windows Phone的用户界面.Xamarin.Forms 通过 ...
- [Java拾遗三]JavaWeb基础之Servlet
Servlet 1,servlet介绍 servlet是一项动态web资源开发技术. 运行在服务器端. 作用:处理业务逻辑,生成动态的内容,返回给浏览器 ...
- 在ASP.NET MVC5中建置以角色为基础的授权机制
在前一篇贴文中,已探索过如何在MVC5中自定ASP.NET Identity,接下来要来试试在MVC5中如何运用 ASP.NET Identity来设定一个以 "角色"为基础的授权 ...
- maven源码分析- mvn.bat分析
第一次知道MAVEN是在2008年,当时想分析geoserver这个开源项目,发现该项目采用了maven进行项目管理,当时粗略的学习了一下.真正在工作中使用是在09年下半年,个人感觉使用起来还是非常好 ...
- Hibernate入门6.Hibernate检索方式
Hibernate入门6.Hibernate检索方式 20131128 代码下载 链接: http://pan.baidu.com/s/1Ccuup 密码: vqlv Hibernate的整体框架已经 ...
- shell日期的应用
#!bin/bash del_table() { #月初的第一天 month_first_day=`date +%Y%m01` #要删除的日期 last_7day_ago=`date -d " ...
- 巧用Windows 7计划任务设置定时提醒
Windows 7系统有个“计划任务”功能,一般人都很少使用.其实,“计划任务”是系统自带的一个很实用的功能,比如说,这个功能可以设置定时提醒,这样在使用电脑时就不会因为太过投入而导致错过重要的事务. ...
- Multiplexing SDIO Devices Using MAX II or CoolRunner-II CPLD
XAPP906 Supporting Multiple SD Devices with CoolRunner-II CPLDs There has been an increasing demand ...
- Beego源码分析(转)
摘要 beego 是 @astaxie 开发的重量级Go语言Web框架.它有标准的MVC模式,完善的功能模块,和优异的调试和开发模式等特点.并且beego在国内企业用户较多,社区发达和Q群,文档齐全, ...
- WindowsPhone-GameBoy模拟器开发六--[转]指令系统实现必读:补码
网上有同行写了些好文章,在此就不现丑了,贴上连接,放在这里为了补充系列的完整性 计算机为什么选用二进制补码 为什么补码重要?因为计算机中内存.寄存器里面存的数都是用补码表示的!