前言

    在我们刚开始学习C语言时,很容易将sizeof和strlen()函数混淆,那么
在这里我们就先介绍一下**sizeof关键字**

一、sizeof是什么呢?

sizeof是C语言的一种单目操作符,如同C语言中其他的操作符++、–等,sizeof运算符是以字节为单位给出操作对象的存储大小。操作对象可以是表达式,类型名,结构体等,下面会一 一举例。

常见的应用场景

1.直接作用于数据类型

代码如下(示例):

printf("short=%d\n\n", sizeof(short));//结果是short=2
printf("int=%d\n\n", sizeof(int));//int=4
printf("long=%d\n\n", sizeof(long));//long=4
printf("float=%d\n\n", sizeof(float));//float=4
printf("double=%d\n", sizeof(double));//double=8
 需要注意的是在对数据类型进行操作时括号是不可以省去的,若是省
 去则无法通过编译

2.作用于数值

 注:上面介绍sizeof是操作符,并不是函数,这就意味着在某些情况下括号是
 可以省去的

使用形式;四则偶分(var)或sizeof var(不带控号的在这里就不展示了,大家下去可以自己尝试一下)
代码如下(示例):

char c = 'a';
int a = 1;
double b = 1.0;
printf("%d    ", sizeof(c)); // 结果是1

printf("%d    ", sizeof(c + a)); // 结果是4
printf("%d    ", sizeof(a + b));//结果是8
//上面两行代码在运行时发生了整型提升这里我们就不介绍了,不懂的小伙伴可以搜一下

printf("%d   %c", sizeof(c = c + a),c);//结果是1,a,这说明括号中的赋值没有被执行
	

3.作用于数组

      sizeof用于计算数组大小时,计算的是数组总字节大小,并不受存
 储数据多少影响
int arr[10] = { 1,2,5,6,4,7 };
printf("%d  ", sizeof(arr));//结果是40

char c[10] = "a,b,c,f,e";
printf("%d  ", sizeof(c));//结果是10

4.作用于指针

       指针是地址,指向某处内存空间,指针所占字节大小仅受**编译环境**
 影响(在32位和64位机器下会有不同),和所指向空间大小无关。下面
 我将在64位机器下演示。
int a = 0;
int*p1 = &a;
printf("%d  ", sizeof(p1));//结果是8

char b = 0;
char*p2 = &b;
printf("%d  ", sizeof(p2));//结果是8

可以看出虽然两个指针指向的空间大小不同,但是指针所占空间大小并没有受影响

5.作用于结构体

struct W
{
	int a;
	short d;
	char b;
	long c;
}w1;
printf("%d  ", sizeof(w1));//结果是12

struct WW
{
	char b;
	int a;
	long c;
	short d;
}w2;
printf("%d  ", sizeof(w2));//结果是16

明明结构体中定义的类型都相同,为什么结果有差异呢?哈哈哈这就不提到结构体对齐了,因为这不是我们这次的重点就先不介绍了,有兴趣大家可以搜一搜

 下次将介绍strlen()函数和sizeof在计算字符串时的区别
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐