c语言中sizeof
的有关信息介绍如下:
C 语言中的 sizeof 运算符
概述
在C语言中,sizeof 是一个编译时运算符,用于获取数据类型或变量所占用的内存大小(以字节为单位)。它可以应用于任何数据类型(如整型、浮点型等)以及变量、数组、结构体和联合体等。
语法
size_t sizeof(type); size_t sizeof expression;- type:数据类型(例如 int, float, char 等)。
- expression:表达式(可以是变量名、数组名、指针等)。
sizeof 的返回值类型是 size_t,这是一个无符号整数类型,定义在头文件 <stddef.h> 中。
使用示例
基本数据类型
#include <stdio.h> int main() { printf("Size of int: %zu bytes\n", sizeof(int)); printf("Size of float: %zu bytes\n", sizeof(float)); printf("Size of char: %zu bytes\n", sizeof(char)); return 0; }变量
#include <stdio.h> int main() { int a = 5; float b = 3.14f; char c = 'A'; printf("Size of variable a (int): %zu bytes\n", sizeof(a)); printf("Size of variable b (float): %zu bytes\n", sizeof(b)); printf("Size of variable c (char): %zu bytes\n", sizeof(c)); // 或者使用类型 printf("Size of type of variable a: %zu bytes\n", sizeof(int)); return 0; }数组
#include <stdio.h> int main() { int arr[10]; printf("Size of array arr: %zu bytes\n", sizeof(arr)); printf("Number of elements in array arr: %zu\n", sizeof(arr) / sizeof(arr[0])); return 0; }结构体
#include <stdio.h> struct Person { char name[50]; int age; float height; }; int main() { struct Person p; printf("Size of struct Person: %zu bytes\n", sizeof(p)); printf("Size of member name: %zu bytes\n", sizeof(p.name)); printf("Size of member age: %zu bytes\n", sizeof(p.age)); printf("Size of member height: %zu bytes\n", sizeof(p.height)); return 0; }指针
需要注意的是,sizeof 作用于指针时,返回的是指针本身的大小,而不是指针所指向的数据的大小。
#include <stdio.h> int main() { int *ptr; printf("Size of pointer ptr: %zu bytes\n", sizeof(ptr)); // 注意:这里不是 sizeof(*ptr),后者会解引用指针并返回指针所指向的 int 类型的大小 return 0; }
注意事项
- sizeof 在编译时计算其操作数的大小,因此它不会评估其操作数的值。
- 对于数组,sizeof 返回整个数组的内存大小;而对于指针,sizeof 仅返回指针本身的内存大小(通常是 4 或 8 个字节,取决于系统架构)。
- 当使用 sizeof 时,即使表达式包含副作用(例如自增运算),这些副作用也不会发生,因为 sizeof 不实际评估表达式的值。
总结
sizeof 是C语言中一个非常有用的运算符,能够帮助开发者了解不同类型和变量的内存占用情况,从而进行更有效的内存管理和优化。



