一、sizeof的概念
sizeof是C语言的一种单目操作符,如C语言的其他操作符++、--等。它并不是函数。sizeof操作符以字节形式给出了其操作数的存储大小。操作数可以是一个表达式或括在括号内的类型名。操作数的存储大小由操作数的类型决定。
二、sizeof的使用方法
1、用于数据类型
sizeof使用形式:sizeof(type)
数据类型必须用括号括住。如sizeof(int)。
2、用于变量
sizeof使用形式:sizeof(var_name)或sizeof var_name
变量名可以不用括号括住。如sizeof (var_name),sizeof var_name等都是正确形式。带括号的用法更普遍,大多数程序员采用这种形式。
注意:sizeof操作符不能用于函数类型,不完全类型或位字段。不完全类型指具有未知存储大小的数据类型,如未知存储大小的数组类型、未知内容的结构或联合类型、void类型等。
如sizeof(max)若此时变量max定义为int max(),sizeof(char_v) 若此时char_v定义为char char_v [MAX]且MAX未知,sizeof(void)都不是正确形式。
三、sizeof的结果
sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。该类型保证能容纳实现所建立的最大对象的字节大小。
1、若操作数具有类型char、unsigned char或signed char,其结果等于1。
ANSI C正式规定字符类型为1字节。
2、int、unsigned int 、short int、unsigned short 、long int 、unsigned long 、float、double、long double类型的sizeof 在ANSI C中没有具体规定,大小依赖于实现,一般可能分别为2、2、2、2、4、4、4、8、10。
3、当操作数是指针时,sizeof依赖于编译器。例如Microsoft C/C++7.0中,near类指针字节数为2,far、huge类指针字节数为4。一般Unix的指针字节数为4。
4、当操作数具有数组类型时,其结果是数组的总字节数。
5、联合类型操作数的sizeof是其最大字节成员的字节数。结构类型操作数的sizeof是这种类型对象的总字节数,包括任何垫补在内。
让我们看如下结构:
struct {char b; double x;} a;
在某些机器上sizeof(a)=12,而一般sizeof(char)+ sizeof(double)=9。
这是因为编译器在考虑对齐问题时,在结构中插入空位以控制各成员对象的地址对齐。如double类型的结构成员x要放在被4整除的地址。
6、如果操作数是函数中的数组形参或函数类型的形参,sizeof给出其指针的大小。
四、sizeof与其他操作符的关系
sizeof的优先级为2级,比/、%等3级运算符优先级高。它可以与其他操作符一起组成表达式。如i*sizeof(int);其中i为int类型变量。
五、sizeof的主要用途
1、sizeof操作符的一个主要用途是与存储分配和I/O系统那样的例程进行通信。例如:
void *malloc(size_t size),
size_t fread(void * ptr,size_t size,size_t nmemb,FILE * stream)。
2、sizeof的另一个的主要用途是计算数组中元素的个数。例如:
void * memset(void * s,int c,sizeof(s))。
六、建议
由于操作数的字节数在实现时可能出现变化,建议在涉及到操作数字节大小时用ziseof来代替常量计算。
分享到:
相关推荐
在C语言中,`sizeof`是一个非常重要的运算符,它用于获取任何数据类型或变量所占用的内存字节数。这个运算符对于理解和优化代码、处理内存分配以及了解底层计算机工作原理都至关重要。下面我们将详细探讨`sizeof`的...
### 详细解析C语言中的`sizeof` #### 一、`sizeof`的概念 `sizeof`是C语言中的一个单目操作符,类似于其他操作符如`++`和`--`等。需要注意的是,`sizeof`不是函数,而是用来获取操作数(可以是一个表达式或类型名...
C语言中的sizeof操作符 一、sizeof的概念 sizeof是C语言的一种单目操作符,如C语言的其他操作符++、--等。它并不是函数。sizeof操作符以字节形式给出了其操作数的存储大小。操作数可以是一个表达式或括在括号内的...
在C语言中,`sizeof`是一个非常重要的操作符,它用于获取任何数据类型或变量在内存中占用的字节数。下面将详细解释`sizeof`的各个方面。 首先,`sizeof`是一个操作符而不是一个函数,这意味着它在编译时就被计算,...
在C语言中,`sizeof`是一个非常重要的操作符,它用于获取任何数据类型或变量在内存中占用的字节数。下面将详细解释`sizeof`的各个方面。 首先,`sizeof`是一个操作符,而非函数,它能够返回一个表达式或类型所占的...
C 语言中的 sizeof 操作符详解 sizeof 操作符是 C 语言中的单目操作符,它以字节形式给出了其操作数的存储大小。操作数可以是一个表达式或括在括号内的类型名。sizeof 操作符的结果类型是 size_t,它在头文件中 ...
C 语言中的 sizeof 操作符 sizeof 操作符是 C 语言的一种单目操作符,它可以用来获取变量或数据类型的存储大小。sizeof 操作符的结果类型是 size_t,它在头文件中 typedef 为 unsigned int 类型。 一、sizeof 的...
C 语言中的 sizeof 操作符 在 C 语言中,sizeof 是一种单目操作符,用于获取操作数的存储大小。它可以用于数据类型、变量、数组、结构体、联合体和指针等多种类型的操作数。 sizeof 的概念 sizeof 操作符以字节...
在C语言中,通过链表实现对NMEA-0183协议的解析是一种常见且高效的方法,尤其是在处理大量连续到来的数据时。 首先,我们需要理解NMEA-0183协议的基本结构。每个NMEA语句都以"$"开头,以"*"和校验和结尾,中间是...
### 深度解析C语言中的指针 #### 引言 指针是C语言中一个重要的特性,它使得程序员能够直接控制内存访问,并且在处理动态数据结构时提供了极大的灵活性。指针的理解和掌握是学习C语言的关键所在。本文旨在深入探讨...
在C语言中,`sizeof`是一个非常重要的操作符,它用于获取数据类型或者变量在内存中占用的字节数。这个操作符对于理解和优化代码的内存使用是至关重要的。下面将详细解释`sizeof`的各个方面。 首先,`sizeof`是一个...
根据给定的文件内容,我们可以总结出关于C语言中三种基本排序算法——冒泡排序、选择排序以及插入排序的关键知识点。 ### 冒泡排序 #### 基本思想 冒泡排序是一种简单的排序算法,其基本思想是重复地遍历待排序的...
sizeof其实就是用于告诉我们编译器在为某一特定数据或者某种数据类型的数据在存储空间中开辟空间时,开辟的空间大小,以字节为单位。 3,怎么用? sizeof(类型),或者sizeof(变量)都可以,得到的就是类型或者变量...
### 再再论指针——深入解析C语言指针问题 #### 一、引言 在C语言中,指针是其核心特性之一,它赋予了C语言强大的灵活性和高效性。然而,指针的复杂性和非直观性也让不少初学者感到困惑。本文旨在深入探讨C语言中...
它涉及到策略优化和递归思考,常被用来教授C语言编程中的算法设计和分析。在这个问题中,一只猴子在河边发现了一堆桃子,它决定每天吃掉一部分,但是又想留一些给明天吃。猴子不能确定每天吃多少桃子最合适,所以...
3.8 sizeof操作符 3.9 使用getchar()和putchar() 3.10 数学函数 3.10.1 使用abs()和fabs() 3.10.2 unix和数学函数库 3.11 隐式类型转换和强制类型转换 3.11.1 整型提升 3.11.2 寻常算术转换 3.11.3 强制类型...
在C语言中,内存管理是编程过程中的关键环节,它涉及到如何有效地分配和释放内存,以确保程序的正常运行和资源的有效利用。本篇文章将深入探讨C语言中的内存分配问题,特别是关注内存泄漏以及如何使用malloc和指针来...