sizeof的理解

sizeof是返回变量声明后所占的内存数。

对于一个指针而言,声明后,指针本身所占的内存就是4个字节,而声明一个数组的时候就创建了一个数组大小的内存。

如:char *s = "dfsdfsd";   char ss[] = "asdf";  int a[10];int *aa;

sizeof(s) = 4;   s是个指针,指针声明后的地址为4个自己,而这个地址里面存的是后面字符转的地址名。

sizeof(ss) = 5;   数组在声明后大小就确定了

sizeof(a)   = sizeof(int )*10=40;

sizeof(aa) = 4;

  strlen的参数只能是char*或者char数组 且必须是以“\0”结尾,内部实现是用一个循环计算到\0之前为止

当传递一个数组名到函数参数时候。它完全退化成一个指针:

char ss[100] = "0123456789";

sizeof(ss) 结果是100 ===》ss表示在内存中的大小 100×1

strlen(ss) 结果是10 ===》strlen是个函数内部实现是用一个循环计算到\\\\\\\\0为止之前

int ss[100] = "0123456789";

sizeof(ss) 结果 400 ===》ss表示再内存中的大小 100×4

strlen(ss) 错误 ===》strlen的参数只能是char*或者char数组 且必须是以“\0”结尾



其实理解 sizeof 只需要抓住一个要点:栈
程序存储分布有三个区域:栈、静态和动态。能够从代码直接操作的对象,包括任何类型的变量、指针,都是在栈上的;动态和静态存储区是靠栈上的指针来间接操作的。 sizeof 操作符,计算的是对象在栈上的投影体积;记住这个就很多东西都很清楚了。
char const * static_string = "Hello";
sizeof(static_string) sizeof 一个指针,所以在 32bit system 是 4
char stack_string[] = "Hello";
sizeof(stack_string) sizeof 一个数组,所以是 6 * sizeof(char)
char * string = new char[6];
strncpy(string,"Hello",6");
sizeof(string) sizeof 一个指针,所以还是 4。和第一个不同的是,这个指针指向了动态存储区而不是静态存储区。
不管指针指向的内容在什么地方, sizeof 得到的都是指针变量本身的大小


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值