sizeof

下面一段代码

#include <stdio.h>
#include <string.h>


void func(char str[50])
{
	printf("A %d B %d\n",sizeof(str),strlen(str));
}


int main(void)
{
	char stra[]="HelloWorld";
	char *strb=stra;
	printf("C %d  D %d\n",sizeof(stra),sizeof(strb++));
	func(++strb);
	printf("E %d  F %d\n",strlen(stra),strlen(strb++));
	int i = 10;
	printf("G %d\n",sizeof(++i));
	printf("H %d\n",i);
	getchar();
	return 0;
}

的运行结果是

C 11  D 4
A 4 B 9
E 10  F 9
G 4
H 10

解释如下:

1. stra 是一个数组,对数组做sizeof 操作等效于对其元素类型做sizeof操作的结果乘上数组元素的个数;

2. 对char类型或值为char类型的表达式做sizeof操作保证得1.

因此 C处 sizeof(stra)是11,记住c风格字符串结尾符null.

3. 对指针做sizeof操作将返回存放指针所需的内存大小. 

strb++是指针,在vs 2005系统中,一个指针型数据占据4个字节。故D处 sizeof(strb++)为4.

4. 将sizeof作用在表达式上,将获得该表达式的结果的类型长度,但是并没有计算表达式的值。

因此第一个printf之后, 调用func之前, strb仍然指向字符数组stra的第一个

5. 数组的两个特殊性质:一是不能复制数组;二是使用数组名时,数组名会自动转化为指向其第一个元素的指针

6. 处理数组的函数通常通过操纵指向数组中的元素的指针来处理数组

7. 编译器忽略数组形参的长度

因此传进func(++strb)的是指向stra的第二个元素的指针

8. strlen(p)返回从p指向的字符数组当前位置到字符结束符null的字符个数。

因此 B 处strlen(str),即strlen(++strb)是9,从e到d,包括d,但不包括null。

9. 在vs 2005系统中,一个int型数据占据4个字节.

10. 如果要获取一个指针所指向对象的大小,必须对该指针做解引用。




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值