深入探索C语言中的sizeof关键字

简介: 深入探索C语言中的sizeof关键字

在C语言中,sizeof是一个运算符,用于获取数据类型或对象在内存中的大小(以字节为单位)。这是一个非常有用的工具,它可以帮助我们理解不同数据类型如何占用内存,以及如何在编程时更有效地管理内存。


基本数据类型的sizeof

C语言的基本数据类型包括整型(如intshortlong)、浮点型(如floatdouble)、字符型(如char)等。使用sizeof可以获取这些数据类型的大小。

#include <stdio.h>

int main() {
    printf("Size of int: %zu bytes\n", sizeof(int));
    printf("Size of short: %zu bytes\n", sizeof(short));
    printf("Size of long: %zu bytes\n", sizeof(long));
    printf("Size of float: %zu bytes\n", sizeof(float));
    printf("Size of double: %zu bytes\n", sizeof(double));
    printf("Size of char: %zu bytes\n", sizeof(char));
    return 0;
}


数组的sizeof

对于数组,sizeof返回整个数组的大小,即数组总字节数。

#include <stdio.h>

int main() {
    int array[10];
    printf("Size of int array: %zu bytes\n", sizeof(array));
    return 0;
}

结构体的sizeof

对于结构体,sizeof返回整个结构体的大小。结构体的大小通常是其所有成员大小的总和,但可能由于内存对齐(padding)的原因而有所不同。

#include <stdio.h>

struct MyStruct {
    char c;
    int i;
    float f;
};

int main() {
    printf("Size of MyStruct: %zu bytes\n", sizeof(struct MyStruct));
    return 0;
}

联合体的sizeof

联合体的大小是其最大成员的大小,因为联合体中的所有成员都共享同一块内存空间。

#include <stdio.h>

union MyUnion {
    int i;
    float f;
    char str[20];
};

int main() {
    printf("Size of MyUnion: %zu bytes\n", sizeof(union MyUnion));
    return 0;
}


注意事项

  • sizeof返回的是size_t类型的值,所以应该使用%zu格式化字符串来打印。
  • sizeof是在编译时计算的,因此它返回的是数据类型或对象在编译时的大小。
  • 对于指针类型,sizeof通常返回指针本身的大小,而不是指针指向的数据的大小。
  • 由于内存对齐的原因,结构体的大小可能会大于其成员大小的总和。
  • sizeof不能用于函数类型、不完全类型(如只声明了前向引用的结构体)或位字段类型。

通过理解sizeof运算符,我们可以更好地管理内存,优化数据结构,并写出更加健壮和高效的代码

相关文章
|
1月前
|
Serverless 编译器 C语言
【C语言】指针篇- 深度解析Sizeof和Strlen:热门面试题探究(5/5)
【C语言】指针篇- 深度解析Sizeof和Strlen:热门面试题探究(5/5)
|
4月前
|
C语言
|
5月前
|
C语言
C 语言关于sizeof() 和 strlen()区别?
C 语言关于sizeof() 和 strlen()区别?
36 2
|
4月前
|
存储 C语言
C语言中static关键字的作用与用法解析
C语言中static关键字的作用与用法解析
|
5月前
|
存储 C语言
C语言中的typedef关键字:为类型定义新名称
C语言中的typedef关键字:为类型定义新名称
|
5月前
|
存储 编译器 C语言
C语言中的关键字与标识符详解
C语言中的关键字与标识符详解
112 0
|
5月前
|
编译器 C语言
【C语言】:sizeof操作符的使用和各种常见数据类型的大小
【C语言】:sizeof操作符的使用和各种常见数据类型的大小
86 0
|
6月前
|
算法 编译器 API
C语言易混淆、简单算法、结构体题目练习、常见关键字总结-1
C语言易混淆、简单算法、结构体题目练习、常见关键字总结
|
6月前
|
C语言
C语言(8)----长度计算方法:sizeof与strlen的对比
C语言(8)----长度计算方法:sizeof与strlen的对比
40 0
|
6月前
|
安全 编译器 C语言
C语言中的const关键字
C语言中的const关键字
53 2