C语言sizeof的用法及注意事项

C语言sizeof的用法及注意事项

求普通变量的大小

#include <stdio.h>
int main()
{
    int a = 5;
    printf ("%d\n", sizeof(a));		//4 计算a所占空间的大小,单位是字节
    printf ("%d\n", sizeof (int));	//4 计算int类型的大小
    printf ("%d\n", sizeof a);		//4 可以省略括号,说明sizeof是一个操作符,不是函数
    return 0;
}

求数组的大小

#include <stdio.h>
int main()
{
    int arr[10]= { 0 };
	printf ("%d\n" , sizeof(arr));			//40,单位是字节
	printf ("%d\n", sizeof(int[10]));		//40, int[10]是arr数组的类型
    return 0;
}

特殊例子:

#include <stdio.h>
int main()
{
    short s =5;
    int a = 10;
    printf ( "%d \n", sizeof(s = a + 2));		//结果为:2
    printf ( "%d \n", s);			//结果为:5
	return 0;
}

解释:因为sizeof括号中的表达式是不参与运算的! 源文件在变成可执行文件过程中,经过预处理,编译,汇编,链接,sizeof在编译中就判断了s的大小,给出值为2,并且表达式不参与运算,而printf函数是在运行的时候再执行的,所以直接打印出2,和下面s变量的值5


sizeof计算指针

#include <stdio.h>
void test1(int arr[])
{
	printf("%d\n",sizeof(arr));		//	4/8	->	指针的大小
}
void test2(char ch[])
{
	printf("%d\n",sizeof(ch));		//	4/8	->	指针的大小
}
int main()
{
	int arr[10] = {0};
	char ch[10] = {0};
	printf("%d\n", sizeof(arr));	//40
	printf("%d\n", sizeof(ch));		//10
	test1(arr);
	test2(ch);
	return 0;
}

用sizeof求数组大小时要注意,当数组被当作参数传递过去时,传过去的是数组的首元素的地址,因为是地址,所以用指针来接收,所以函数里面用sizeof求的都是指针的大小,不是数组,32位平台下都是4字节,64位平台下都是8字节

strlen与sizeof的区别

strlen -函数:求字符串长度的,找’\0’之前出现的字符个数

sizeof -操作符:算变量/类型所占内存大小,单位是字节

sizeof的返回类型

#include <stdio.h>
int i; 		//i是全局变量,不初始化,默认是0
int main ()
{
    i--;		//-1
    if (i > sizeof(i)) 
    {
    	printf ( "> \n" );
    }
    else
    {
    	printf ("<\n");
    }
    return 0;
}

这个例子的输出结果是>,sizeof这个操作符,算出的结果的类型是unsigned int,因为大小是没有负数的,当进行 i > sizeof(i) 比较时,会把有符号的 i 算术转换为无符号,因为-1在内存中全1存储,变为无符号后原码补码一样,将会是一个很大的数,肯定比4字节大,所以输出>

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值