关于sizeof 和strlen 的用法

/*
       2016年6月6日12:40:22    关于sizeof 和 strlen 的用法
*/
#include<stdio.h>
#include<string.h>


void sizeofApp(char * a)
{
    printf("%d %d %d\n",sizeof(a),sizeof(*a),strlen(a));
}


int main(void)
{
char str1[] = "1";
char str2[] = "11";
 
printf("sizeof(str1) = %d\n",sizeof(str1));
printf("sizeof(str2) = %d\n",sizeof(str2));
printf("strlen(str1) = %d\n",strlen(str1));
printf("strlen(str2) = %d\n",strlen(str2));
sizeofApp(str1);
sizeofApp(str2);
return 0;
}
/*
在VC++中的结果是:
sizeof(str1) = 2
sizeof(str2) = 3
strlen(str1) = 1
strlen(str2) = 2
4 1 1
4 1 2
Press any key to continue
分析:为什么会出现这样的结果,sizeof 在不不同的函数里对同一个数组进行处理,结果不一样
      ①首先来看看sizeof的作用,sizeof作用就是返回一个对象或者类型所占的字节数
        先来看一看第一个 4 是怎样来的 ,首先 char str1[] = "1" 语句申请了两个字节的内存空间(一个字节保存 '\0')
   然后将str1数组的首地址传给sizeofApp的形参,记住, 这时候接收的是str1的首地址,这时候形参a的值就变成了str1的首地址, 然后sizeof(a)这个
   语句的功能是计算 a (也就是存str1首地址的指针变量)的所占内存字节大小
,在32位机下,指针变量所占内存大小都是4个字节,所以说值为4,同
   样的道理,第二个4也一样
 ②然后我们看第一个4后面的1是怎么来的,我们前面说了,sizeofApp(str1)是把str1的首地址传给了sizeofApp,那么 a 就指向了str1 数组的第一个元素
        * a 就代表了第一个元素, 所以说 sizeof(*a) 的意思就是说 计算 a[0] 即 str1[0] 所占的内存 显然 这个数组中的一个元素所占内存为 1个字节
   所以值为1(注意:这时候 sizeof(*a) 不是计算整个数组所占内存大小)
 ③在来看第一个4后面的第二个1,首先我们看一下strlen的含义,strlen是计算机C语言的函数,作用是计算字符串s的长度(也就是说有几个元素),不包
   括'\0'在内,它从内存的某个位置开始扫描,知道碰到第一个字符串结束符'\0',为止,然后返回计数值这个例子中,主函数中使用strlen(str1),其过程
就是碰到 字符 1 计 1 碰到字符 \0 停止 返回 1 ;而在被调函数中, a 指向了 str1 的第一个元素,然后 访问 第一个元素 1 计 1 访问第二个元素
停止,返回1 和在主函数是一样的
其他的可以自行分析
*/
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

趣谈编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值