关于sizeof的几个问题

一.sizeof的特点(与strlen比较)

1.sizeof是运算符,strlen是函数,这意味着编译程序在编译的时候就把sizeof计算过了,所以sizeof(x)可以用来定义数组维数。

例如

int arr[sizeof(int)];//相当于int arr[4];

2.sizeof能够返回变量或类型所占的字节空间大小,而strlen只能够返回字符串的大小,即字符串必须以'\0'结尾。

char str[20]="0123456789";
int a=strlen(str); //a=10;得到的是字符串的长度
int b=sizeof(str); //而b=20;得到的是数组的长度

二.sizeof计算不同类型的值的大小

1.变量

因为sizeof是个运算符,所以计算变量大小时可以不加括号,但是计算类型的大小一定要加括号。

可以按以下几种变量类型分类:

a.对基本数据类型的变量,取得的是数据类型的大小

b.对结构体类型的变量,取得的是结构体变量所占空间的大小。这其中涉及到字节对齐的问题。

c.对数组类型的变量,取得的是数组的大小,并不是数组元素的个数,例如:

int a[3];

sizeof(a)=3*4;而不是等于3.

d.对指针类型(包括函数指针)的变量,取得的是指针的大小,即4个字节

short f();
printf("%d\n", sizeof(f()));///输出2,

e.对数组形参,与指针相同返回的是指针的大小,因为c语言中并不传递数组的每个元素值,只是将数组的首地址传给函数。例如

int fun(int a[3])
{.....
sizeof(a)=4;//而不是3*4;
}

2.基本的数据类型

得到的是基本类型的大小。
















几个面试问题:

i.sizeof在计算变量所占空间大小时采取的机制

//参考上面

//下面两个题暂时不会做

ii.如果是自己为一个类写一个sizeof函数,应该考虑哪些问题

iii.虚函数和虚继承对于一个类求sizeof的影响有什么差别








  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值