C语言sizeof 详解

1、sizeof是C语言的一个操作符,类似于++、–等。sizeof能够告诉我们编译器为某一特定数据或者某一个类型的数据在内存中分配空间时分配的大小,大小以字节为单位。基本用法为:

1sizeof(变量);
2sizeof 变量;
3sizeof(类型);

2、注意点:
(1)sizeof返回的占用空间大小是为这个变量开辟的大小,而不只是他用到的空间。所以对结构体用的时候,大多情况下就得考虑字节对齐的问题;示例代码:

#include <stdio.h>
#include <Windows.h>
struct Person
{
	short a;
	int b;
};

int main(void)
{

	printf("Person size:%d\n", sizeof(struct Person));
	system("pause");
	return 0;
}

输出结果为:
在这里插入图片描述
(2)sizeof返回的数据结果类型是unsigned int,即为无负号的正数;
unsigned int 示例代码:

#include <stdio.h>
#include <Windows.h>
void test(void)
{
	unsigned int a = 20;
	if (a - 40 > 0)
	{
		printf("a大于40!\n");
	}
	else
	{
		printf("a小于40!\n");
	}
}

int main(void)
{

	test();
	system("pause");
	return 0;
}

输出结果:
在这里插入图片描述
sizeof示例代码:

#include <stdio.h>
#include <Windows.h>
void test(void)
{
	int b;
	if (sizeof(b) - 5 > 0)
	{
		printf("int 大于5!\n");
	}
	else
	{
		printf("int 小于5!\n");
	}
}

int main(void)
{

	test();
	system("pause");
	return 0;
}

输出结果为:
在这里插入图片描述
(3)要注意数组名和指针变量的区别,通常情况下,我们总觉得数组名和指针变量差不多但是在某些情况下要注意他们之间的区别;
示例代码:

#include <stdio.h>
#include <Windows.h>
int arrSize(int arr[])
{
	return sizeof(arr);
}
void test(void)
{
	int arr[8];
	printf("arr size:%d \n", sizeof(arr));
	printf("arr size:%d \n", arrSize(arr));
}

int main(void)
{

	test();
	system("pause");
	return 0;
}

输出结果为:
在这里插入图片描述
分析:第一个输出为32原因是sizeof测量的是arr数组的大小。第二个输出为4是因为当数组当参数进行传递时,数组只传递首地址,即数组名,所以函数arrSize返回的值是arr数组首地址的大小。

发布了45 篇原创文章 · 获赞 15 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/CHQC388/article/details/86741440