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求的是字节长度,而 ...
随机推荐
- HTTP权威指南阅读笔记五:Web服务器
Web服务器会做些什么: 1.建产连接:接受一个客户端连接,或者如果不希望与这个客户端建立连接,就将其关闭. 1)处理新连接 2)客户端主机名识别 3)通过ident确定客户端用户 ident在组织内 ...
- [ACM_模拟] POJ 1094 Sorting It All Out (拓扑排序+Floyd算法 判断关系是否矛盾或统一)
Description An ascending sorted sequence of distinct values is one in which some form of a less-than ...
- Abp Application级别的生命周期
本篇级别: 中高级篇,假设各位知道Abp是什么, Abp里面的基本的概念及用法(想了解基本概念的可在这里学习: http://www.cnblogs.com/mienreal/p/4358806.ht ...
- C++ 标准IO库
<C++ Primer 4th>读书笔记 C++ 的输入/输出(input/output)由标准库提供.标准库定义了一族类型,支持对文件和控制窗口等设备的读写(IO).还定义了其他一些类型 ...
- win系统下nodejs安装及环境配置
第一步:下载安装文件下载nodejs,官网:http://nodejs.org/download/,我这里下载的是node-v0.10.28-x86.msi,如下图: 第二步:安装nodejs下载完成 ...
- Javascript构造函数与prototype
构造函数 构造函数的缺点 prototype的引入 Prototype模式的验证方法 构造函数 在Javascript语言中,new命令后面跟的不是类,而是构造函数(constructor). 构造函 ...
- paip.最好的脚本语言node js 环境搭建连接mysql
paip.最好的脚本语言node js 环境搭建连接mysql #====下载node...走十一个exe..容易的.. 1 #0----Hello world .js 2 #---------模 ...
- MyEclipse使用总结——MyEclipse文件查找技巧 ctrl+shift+R ctrl+H
一.查找文件 使用快捷键[ctrl+shift+R]弹出弹出文件查找框,如下图所示: 二.查找包含某个字符串的文件 使用快捷键[ctrl+H]在弹出对话框中选File Search选项,然后在第一个文 ...
- jq滚动监听-导航滚动
github地址:https://github.com/yutaogege/jquery.nav.js 代码: <!DOCTYPE html> <html> <head& ...
- Android兼容包multidex的开发和构建方法
在Android开发中,函数方法超过65k限制后,我们就常常会用到multidex分包解决,但是multidex的配置,对系统apk的构建.签名.打包复杂性大大的增加,严重的降低了构建效率.那这个问题 ...