当前位置:网站首页>sizeof的详细解说和与strlen的区别
sizeof的详细解说和与strlen的区别
2022-08-01 21:03:00 【勾栏听曲_0】
目录
sizeof
介绍
sizeof是C语言中保留关键字,是求字节运算符,单目运算符。是一个判断数据类型或者表达式长度的运算符。
sizeof(x):求x所占的内存字节数
x可以是一个对象(变量,数组..)都行,也可以是一个类型,x可以不存在,只要typeof(x)确定就可以。
sizeof(x):先求x的类型,然后再求该类型所占的字节数。
1.typeof(x)
2.sizeof(typeof(x))
用法
sizeof (类型说明符)
sizeof 表达式
语法
sizeof有两种语法形式,如下:
sizeof(type_name);//sizeof(类型);
sizeof object;//sizeof对象;
因此以下四种情况
int i;
sizeof(i);//ok
sizeof i;//ok
sizeof(int);//ok
sizeof int;//error
sizeof(指针类型)
sizeof(指针类型) == 机器字长
机器字长:
eq:32bits机器:机器内部地址线的根数,就是地址的bit位数。
如果机器字长是32bits,在该机器内部所有东西的地址都是32bits.
int *p = NULL;
char *p2 = "12345";
printf("sizeof(p)");
typeof(p) = int *
sizeof(p) = sizeof(int *) = sizeof(指针) = 4bytes (32bits的机器)
printf("sizeof(p2)");
typeof(p2) = char *
sizeof(p2) = sizeof(char *) = sizeof(指针) = 4bytes
所以以上两种指针类型的字长都是4字节
int (*p)[4]; //p是一个数组指针
void (*p2)(int, float);//p2 是一个函数指针
sizeof(p):4
sizeof(*p):16
sizeof(p2): 4
sizeof(*p2): 1
不管你是什么类型的指针,你保存的是别的对象的地址,所有对象的地址,在32bits机器上都是32bits(4个字节)
在32bits机器上,所有指针变量占4个字节。
p是一个指针变量
p和*p的区别:
p表示指针变量本身
*p表示指向的对象(的值)。
sizeof(*指针)
int *p = NULL;
char *p2 = "12345";
sizeof(*p) = ?
typeof(*p):
p是一个指针,*p = *地址 ==》地址对应的那个变量
typeof(*p):求p指向的类型 --》int
sizeof(int) = 4
sizeof(*p2) = ?
typeof(*p2):求p2指向的类型 : char
sizeof(*p2) = sizeof(char ) = 1
特别注意多重指针,除了最外层的指针是与他的类型一样外,其他层级的指针都是4字节(32bits机器)
32bits机器
char ***p3;
sizeof(p3)= ? //4
p3是一个指针,指向***p3,所以,sizeof(***p3) = 4
sizeof(*p3) = ?//4
*p3是一个指针,指向**p3,所以,sizeof(*p3) = 4
sizeof(**p3) = ?//4
**p3是一个指针,**p3 指向了char *,所以,sizeof(**p3) = 4
sizeof(***p3) = ?//1
p3指向了char,所以sizeof(***p3) = 1
求数组的大小
int a[100];
sizeof(a) = ?
sizeof(元素类型)*元素个数 = sizeof(int) * 100 = 400;
sizeof(a[1024]);// 4
虽然a[1024]不存在,但是类型是确定的。
typeof(a[1024]) = int;
sizeof(int) = 4;
注意作为数组名出现时,当指针用
int main()
{
int a[3][4];
func_xxx(a,3)
}
void func_xxx( int a[][4], int n)
{
sizeof(a) = ?// 4(32bits) 数组名作函数参数,当指针用的。
}
注意区分指针数组与数组指针
int *p[4]; //p是一个指针数组 里面4个元素都是指针。
int (*a)[4];//a是一个数组指针 是一个指针 指向了一个数组
sizeof(p)
typeof(p) = int[4] *
sizeof(p) = sizeof(int[4] *) * 4 = 4 * 4 = 16
sizeof(a)
typeof(a) = int[4]*
sizeof(a) = sizeof(int[4] *) = sizeof(指针) = 4
求表达式的大小
sizeof(1) = 4;
因为typeof(1) = int,所以sizeof(1) = sizeof(int) = 4
同理sizeof(1.0) = 8;
sizeof('a') = 1;
sizeof("abcd") = 5; //因为最后还有一个'\0';
sizeof和strlen区别
1.sizeof是一个运算符,strlen是一个函数;
2.sizeof求字节的大小,strlen求字符串的长度。
最常见的区别
sizeof("abcd") = 5; //因为最后还有一个'\0';
strlen("abcd") = 4; //最后的'\0'不计入;
边栏推荐
- 附录A printf、varargs与stdarg A.1 printf函数族
- tiup mirror clone
- Buttons with good user experience should not have hover state on mobile phones
- 外骨骼机器人(七):标准步态数据库
- 附录A printf、varargs与stdarg A.2 使用varargs.h来实现可变参数列表
- 使用百度EasyDL实现厂区工人抽烟行为识别
- C专家编程 序
- 网红驼背矫正产品真的管用吗?如何预防驼背?医生说要这样做
- 360借条安全专家:陌生微信好友不要轻易加贷款推广多是诈骗
- 这些 hook 更优雅的管理你的状态
猜你喜欢
随机推荐
字符串
分类接口,淘宝分类详情 API
那些关于DOM的常见Hook封装(二)
JS提升:如何中断Promise的链式调用
The configuration manual for the secondary development of the XE training system of the missing moment document system
【微信小程序】【AR】threejs-miniprogram 安装(76/100)
SkiaSharp 之 WPF 自绘 五环弹动球(案例版)
Graph adjacency matrix storage
Which websites are commonly used for patent searches?
宝塔搭建PESCMS-Ticket开源客服工单系统源码实测
R语言进行相关的操作
LinkedList source code sharing
StringTable Detailed String Pool Performance Tuning String Concatenation
C陷阱与缺陷 第7章 可移植性缺陷 7.8 随机数的大小
Internet使用的网络协议是什么
Convolutional Neural Network (CNN) mnist Digit Recognition - Tensorflow
【Kaggle】Classify Leaves
tiup mirror grant
写给刚进互联网圈子的人,不管你是开发,测试,产品,运维都适用
Kubernetes 如何实现组件高可用