python sizeof函数_sizeof运算符和strlen函数 ZeroMemory函数和memset函数

strlen和sizeof

在之前一直把两个东西在某种意义上混淆了,对它们的功能不是很熟悉。

在逛了下谷歌之后,发现自己误解的东西很多。

strlen与sizeof的区别

1.sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。

该类型保证能容纳实现所建立的最大对象的字节大小。

2.sizeof是算符,strlen是函数。

3.sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以''\0''结尾的。

4.数组做sizeof的参数不退化,传递给strlen就退化为指针了。

5.大部分编译程序在编译的时候就把sizeof计算过了 是类型或是变量的长度这就是sizeof(x)可以用来定义数组维数的原因

char str[20]="0123456789";//str是编译期大小已经固定的数组

int a=strlen(str); //a=10;//strlen()在运行起确定

int b=sizeof(str); //而b=20;//sizeof()在编译期确定

6.strlen的结果要在运行的时候才能计算出来,是用来计算字符串的实际长度,不是类型占内存的大小。

7.sizeof后如果是类型必须加括弧,如果是变量名可以不加括弧。这是因为sizeof是个操作符不是个函数。

char c;

sizeof c;//变量名可以不加括弧

8.当适用了于一个结构类型时或变量, sizeof 返回实际的大小,

当适用一静态地空间数组, sizeof 归还全部数组的尺寸。

sizeof 操作符不能返回动态地被分派了的数组或外部的数组的尺寸

笔者的感悟:

我的误解是sizeof和strlen都是返回字符串的长度,其实其中真的有很多的幼稚的地方,相信很多的程序员一开始也会有所困惑。

char * test = “daoluan”;

sizeof的结果是4,很明显是类型的大小;而strlen调用的结果是6,在这里strlen聪明多了。

char test[10] = “daoluan”;

sizeof的结果是10(编译期间已经准备好了),而strlen的结果是6,在这里strlen也很聪明。

这样的结果就很明朗了。

2011-12-10的补充:

声明一个字符数组比如:char str[9]一并对其进行赋值的时候,有些人这样:

char str[9] = "abcdefghi";//9个字符,没错啊

可惜编译器不允许,字符数组规定,数组的最后一个值应该为\0(也就是空格),所以上面的语句是错误的。

应该改为:

char str[9] = "abcdefgh"

ZeroMemory和memset

两者的功能是一样的,将一段内存的内容置为0,当然前者要memset(&valiable,0,sizeof(valiable))才是置0。

所以比起来的话,还是memset的功能强大一点,毕竟还可以不是置0,

memset(&valiable,1,sizeof(valiable))。

memset函数是C Run-time Library也就是我们熟悉的C运行时库,而后者ZeroMemory是win32 api的版本,如果需要跨平台的话用memset,如果是在win下工作,那用ZeroMemory也不为过。

ZeroMemory是在win32下是一个宏,而不是一个函数,这点要清楚。

这很基础,但是发现学习过程当中都没有注意,希望可以帮助很多很多的初学者。

本文完2011-12-10(更新)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 Python 中,要获得对象的大小,可以使用 sys 模块中的 getsizeof() 函数。例如,要获取一个字符串 "hello" 的大小,可以使用以下代码: ``` import sys size = sys.getsizeof("hello") print(size) ``` 输出结果为: ``` 54 ``` 请注意,这个大小包括对象本身的大小以及其引用的任何其他对象的大小,因此它可能比您期望的要大。 ### 回答2: 在Python中,没有内置的sizeof()函数,但是可以使用sys库中的getsizeof()函数来获取对象的大小。getsizeof()函数返回对象占用的内存字节数。 具体使用方法如下: 首先,需要导入sys库:import sys 然后,使用getsizeof()函数获取对象的大小:sys.getsizeof(对象) 注意,getsizeof()函数只返回对象本身占用的内存大小,并不包括对象引用的其他对象的内存。 例如,对于一个整数对象: import sys num = 123 size = sys.getsizeof(num) print("整数对象占用的内存大小为:", size) 输出结果为:整数对象占用的内存大小为:28 需要注意的是,getsizeof()函数只能获取Python对象的大小,对于非Python对象(如C扩展的对象)和内存映射文件等,是无法获取准确大小的。 如果需要获取对象占用的总字节数(包括引用的其他对象所占用的内存),可以使用sys.getsizeof()函数结合递归遍历对象的方式进行累加计算。但是由于Python的垃圾回收机制,可能会导致部分对象的大小被重复计算。因此,这种方式并不是很准确,而且会增加计算的复杂性和时间消耗。 总结来说,Python中没有直接的sizeof()函数,但是可以通过sys库中的getsizeof()函数获取对象本身占用的内存大小,但是无法精确计算对象的总内存大小。 ### 回答3: 在Python中,没有sizeof函数来获取一个对象的大小。这是因为Python是一种动态类型语言,它的对象在运行时才会被创建和分配内存,而不是在编译时就确定好大小。 要计算一个Python对象的大小,我们可以使用sys模块中的getsizeof函数。这个函数返回一个对象所占用的字节数,包括对象本身占用的空间和对象所引用的其他对象的空间。 下面是一个示例: import sys s = "Hello, World!" # 创建一个字符串对象 size = sys.getsizeof(s) # 获取字符串对象的大小 print(size) # 输出结果 运行这段代码,会输出字符串对象的大小。需要注意的是,这个结果可能会比我们预期的要大,因为它还包括了字符串对象所引用的其他对象的空间,比如字符数组。 另外,还有一种方法可以估计一个对象所占的空间大小,即使用pympler库中的asizeof函数。这个函数可以更精确地计算一个对象及其所有引用对象的大小,但使用前需要先安装该库。 总之,虽然Python没有内建的sizeof函数,但我们可以借助sys模块中的getsizeof函数或pympler库中的asizeof函数来估算一个Python对象的大小。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值