0
点赞
收藏
分享

微信扫一扫

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

秀儿2020 2022-03-11 阅读 46
c语言

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

求普通变量的大小

#include <stdio.h>
int main()
{
    int a = 5;
    printf ("%d\n", sizeof(a));		//计算a所占空间的大小,单位是字节
    printf ("%d\n", sizeof (int));	//计算int类型的大小
    printf ("%d\n", sizeof a);		//可以省略括号,说明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));		//40
	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字节大,所以输出>

举报

相关推荐

0 条评论