sizeof()用法汇总

合集下载

sizeof 函数

sizeof 函数

sizeof 函数sizeof函数是C语言中的一个运算符,用于获取变量或数据类型所占用的内存空间大小。

在C语言中,sizeof函数的返回值是一个无符号整数,表示所占用的字节数。

本文将从sizeof函数的用法、计算方法、注意事项等方面进行详细介绍。

一、sizeof函数的用法sizeof函数的用法非常简单,可以用于获取变量或数据类型所占用的内存空间大小。

其语法格式如下:sizeof(表达式)其中,表达式可以是变量、常量、数据类型等。

二、sizeof函数的计算方法sizeof函数的计算方法是根据数据类型来确定所占用的字节数。

不同的数据类型在内存中占用的空间大小是固定的,因此sizeof函数可以根据数据类型来返回相应的字节数。

例如,sizeof(char)返回的是1,因为char类型占用1个字节;sizeof(int)返回的是4,因为int类型占用4个字节;sizeof(float)返回的是4,因为float类型占用4个字节;sizeof(double)返回的是8,因为double类型占用8个字节。

需要注意的是,sizeof函数返回的是字节数,而不是位数。

一个字节等于8个位,所以sizeof函数返回的结果可以用来判断数据类型的位数。

三、sizeof函数的注意事项1. sizeof函数只能用于静态类型,不能用于动态类型。

也就是说,sizeof函数不能用于动态分配的内存,比如指针指向的内存空间。

2. sizeof函数不能直接用于函数、数组和void类型。

对于函数和void类型,可以使用指针来获取其所占用的内存空间大小;对于数组,可以使用sizeof(数组名)来获取数组的总大小。

3. sizeof函数的结果是一个常量表达式,在编译时就能得到结果,因此sizeof函数的参数不会被执行。

4. sizeof函数返回的结果是一个无符号整数,可以用%lu或%zu格式输出。

四、sizeof函数的应用举例1. 获取变量的大小```cint num;size_t size = sizeof(num);printf("变量num的大小为:%zu\n", size);```2. 获取数据类型的大小```csize_t size1 = sizeof(char);size_t size2 = sizeof(int);size_t size3 = sizeof(float);size_t size4 = sizeof(double);printf("char类型的大小为:%zu\n", size1);printf("int类型的大小为:%zu\n", size2);printf("float类型的大小为:%zu\n", size3);printf("double类型的大小为:%zu\n", size4);```3. 获取数组的大小```cint arr[10];size_t size = sizeof(arr);printf("数组arr的大小为:%zu\n", size);```5. 获取指针所指向的类型的大小```cint* ptr;size_t size = sizeof(*ptr);printf("指针ptr所指向的类型的大小为:%zu\n", size);```五、总结sizeof函数是C语言中用于获取变量或数据类型所占用的内存空间大小的一个非常实用的运算符。

sizeof在c语言中的用法

sizeof在c语言中的用法

sizeof在c语言中的用法C语言中的sizeof是一种非常有用的操作符,它可以用来获取变量的大小。

这种操作符能够提供非常有用的信息,特别是当你想要确定内存空间大小时。

本文将讨论sizeof在C语言中的用法,包括如何使用它以及它如何帮助开发者实现自己的目标。

首先,让我们来讨论sizeof运算符的基本用法。

sizeof操作符可以应用在变量上,例如,如果你想要知道整数的大小,你可以使用以下语句:int a;sizeof(a);这将返回一个整数,这个数字表示a变量的大小,如果a是int 类型,那么返回的数字应该是4(因为int数据类型的大小是4个字节)。

除了变量,sizeof还可以用于复杂的表达式,例如,你可以使用以下语句来获取一个结构体的大小:struct node{int data;struct node *next;};sizeof(struct node)这将返回结构体node的大小,这是以字节为单位的。

这样,你就可以很容易地知道一个结构体的所有成员的大小,从而可以知道该结构体需要多少字节的内存来存储。

另一个有用的用法是sizeof获取数组大小,例如:int array[10];sizeof(array)这将返回一个数字,这个数字表示整个数组的大小,一般情况下,该数字为数组中每个元素的大小乘以数组元素的数量(在此例中是10)。

sizeof运算符还可以用于求解大括号中对象的大小,以及获取函数指针的大小,而且这两种情况for很有用,因为大括号中的对象大小可以非常容易地获取,而获取函数指针大小也是非常有用的。

另一个用途是获取指向函数的指针大小,例如:int myfunction();sizeof( &myfunction )这将返回指向myfunction函数的指针的大小。

总之,sizeof操作符在C语言中是一个非常有用的工具,它能够帮助开发者更容易地检测数组、结构体和函数指针的大小,从而使得程序更加高效和安全。

sizeof用法

sizeof用法

sizeof用法sizeof是C/C++语言中非常常用的一个操作符,用于计算数据类型或变量在内存中所占的字节数。

本文将从使用方法、注意事项、应用场景等方面进行详细讲解。

1.使用方法sizeof操作符有两种用法:(1)计算数据类型在内存中所占的字节数语法:sizeof(数据类型)例子:sizeof(int)(2)计算变量在内存中所占的字节数语法:sizeof(变量名)例子:int a; sizeof(a)2.注意事项(1)sizeof操作符计算的字节数只与数据类型相关,与具体的实现相关性较小。

(2)对于数组,sizeof计算的是整个数组所占的字节数,而不是指向数组首元素的指针所占的字节数。

(3)对于指针,sizeof计算的是指针本身所占的字节数,而不是指针指向对象所占的字节数。

(4)通过结构体、共用体等数据类型可以自定义复合类型,sizeof计算的是整个数据类型所占的字节数。

(5)sizeof操作符是在编译时计算,不会对程序运行造成任何影响。

3.应用场景(1)动态内存分配在进行动态内存分配时,需要根据数据类型的大小决定分配的内存空间大小。

使用sizeof操作符可以方便地获取数据类型的大小,从而确定需要分配的内存大小。

(2)指针运算对指针进行加减运算时需要知道指针指向对象的大小,从而确定加减的偏移量。

使用sizeof操作符可以获取指针指向对象的大小。

(3)复合类型处理在处理复合类型数据时,需要知道整个数据类型所占的字节数,从而方便进行内存分配、指针运算等操作。

使用sizeof操作符可以获取复合类型数据的大小。

(4)调试和分析在进行程序调试和性能分析时,需要了解数据类型在内存中的存储情况,使用sizeof操作符可以获取数据类型在内存中所占的字节数,进而方便进行调试和分析。

总之,sizeof操作符是C/C++语言中非常重要的操作符,在程序开发、调试和分析中都具有重要作用。

需要注意的是,在使用sizeof操作符时需要注意相关的注意事项,才能正确无误地进行操作。

sizeof函数用法

sizeof函数用法

sizeof函数用法sizeof是C语言中的一个运算符,用来计算一个类型或变量的字节大小。

它的运算结果是一个整数值,表示给定类型或变量所占的字节数。

sizeof有两种常见的使用方式:作用于数据类型和作用于变量。

一、作用于数据类型:sizeof可以用于返回指定数据类型所占的字节数。

通过这种方式,可以在编程中动态地获取类型的大小,避免了手动计算的错误。

sizeof的语法如下:sizeof(type)其中,type表示要计算大小的数据类型。

例如,以下代码可以计算int类型的字节大小:```#include <stdio.h>int main() {int size = sizeof(int);printf("int类型的字节大小为:%d\n", size);return 0;}```运行结果:```int类型的字节大小为:4```在不同的编译环境下,相同的数据类型的大小可能会有所不同。

在C语言中,使用sizeof运算符来动态地获取类型的大小可以提高代码的可移植性。

二、作用于变量:sizeof也可以用于返回给定变量所占的字节数。

通过这种方式,可以在运行时获取变量所占的内存空间大小。

sizeof的语法如下:sizeof(variable)其中,variable表示要计算大小的变量。

例如,以下代码可以计算数组和结构体实例的字节大小:```#include <stdio.h>int main() {int array[10];int size = sizeof(array);printf("数组array的字节大小为:%d\n", size);struct {int a;char b;double c;} s;size = sizeof(s);printf("结构体s的字节大小为:%d\n", size);return 0;}```运行结果:```数组array的字节大小为:40结构体s的字节大小为:24```可以看到,sizeof还可以用来计算数组和结构体的字节大小。

sizeof()的用法

sizeof()的用法

sizeof()的⽤法1. 定义sizeof 是⼀个操作符 operator,不是⼀个函数,其作⽤是返回⼀个对象或类型所占的内存字节数---------------------------------------------------------------------------------------------------------2. 语法sizeof object; //sizeof 对象sizeof(object);sizeof(type_name); // 例如 sizeof(int)对象 object 可以是各种类型的变量,以及表达式(⼀般sizeof不会对表达式进⾏计算);sizeof对对象求内存⼤⼩,最终都是转化为对对象的数据类型进⾏求值;sizeof(表达式) 值为表达式的最终结果的数据类型的⼤⼩int i;sizeof(int); //值为4sizeof(i); //值为4,等价于sizeof(int)sizeof i; //值为4sizeof(2); //值为4,等价于sizeof(int),因为2的类型为intsizeof(2 + 3.14); //值为8,等价于sizeof(double),因为此表达式的结果的类型为doublechar ary[sizeof(int) * 10]; //OK,编译⽆误---------------------------------------------------------------------------------------------------------3. 基本数据类型的sizeof基本数据类型如int short long char double等,其内存⼤⼩与系统有关。

32位系统的int(4 Bytes), short(2 Bytes), long(4 Bytes), char(1 Bytes), double(8 Bytes), float(4 Bytes)4. 结构体的sizeof结构体的sizeof涉及到字节对齐问题,字节对齐有助于加快计算机的存取速度,减⼩指令周期。

sizeof在c语言中的用法 (2)

sizeof在c语言中的用法 (2)

sizeof在c语言中的用法一、sizeof在C语言中的用法简介在C语言中,sizeof是一个用来获取数据类型或变量在内存中所占字节数的运算符。

它返回一个无符号整数值,表示所给参数的大小。

sizeof可以用于各种数据类型,包括基本数据类型(如int、float等)、指针、数组和结构体等。

二、sizeof用法详解1. 获取基本数据类型的大小使用sizeof运算符可以获取C语言中各种基本数据类型的大小。

例如,sizeof(int)将返回该机器上int类型所占的字节数。

这对于编写可移植性强的代码非常有用。

2. 获取数组大小通过使用sizeof运算符,可以获取数组在内存中所占空间的大小。

例如,如果有一个整型数组arr,则sizeof(arr)将返回该数组所占的总字节数。

3. 获取指针变量的大小当使用sizeof运算符计算指针变量时,它将返回指针变量本身所占空间的大小,并不会计算指针所引用对象的大小。

这是因为指针只是一个地址值,在32位操作系统上通常占用4个字节,在64位操作系统上通常占用8个字节。

4. 获取结构体大小通过使用sizeof运算符,可以获取结构体在内存中所占空间的大小。

结构体由多个字段组成,而每个字段又可以是不同的数据类型。

sizeof(struct_name)将返回该结构体所占的总字节数。

5. 计算变量的大小sizeof运算符可以用于计算变量在内存中所占空间的大小。

例如,sizeof(variable)将返回变量所占的字节数。

这在动态分配内存或者进行数据传输时非常有用。

6. 获取字符串长度使用sizeof运算符可以获取字符串(字符数组)在内存中所占空间的大小,包括末尾的空字符'\0'。

例如,如果有一个字符数组str,则sizeof(str)将返回该数组所占空间的总字节数。

7. 特殊情况注意事项在使用sizeof运算符时需要特别注意一些情况。

首先,在计算指针变量时,需要明确指针类型,因为不同类型的指针在不同平台上可能占用不同大小的空间。

sizeof()的使用及各种数据类型的字节大小

sizeof()的使用及各种数据类型的字节大小

sizeof()的使⽤及各种数据类型的字节⼤⼩1、什么是sizeof ⾸先看⼀下sizeof在msdn上的定义: The sizeof keyword gives the amount of storage, in bytes, associated with a variable or a type (including aggregate types). This keyword returns a value of type size_t. 看到return这个字眼,是不是想到了函数?错了,sizeof不是⼀个函数,你见过给⼀个函数传参数,⽽不加括号的吗?sizeof可以,所以sizeof不是函数。

⽹上有⼈说sizeof是⼀元操作符,但是我并不这么认为,因为sizeof更像⼀个特殊的宏,它是在编译阶段求值的。

举个例⼦:cout<<sizeof(int)<<endl; // 32位机上int长度为4cout<<sizeof(1==2)<<endl; // == 操作符返回bool类型,相当于 cout<<sizeof(bool)<<endl; 在编译阶段已经被翻译为:cout<<4<<endl;cout<<1<<endl; 这⾥有个陷阱,看下⾯的程序:int a = 0;cout<<sizeof(a=3)<<endl;cout<<a<<endl; 输出为什么是4,0⽽不是期望中的4,3???就在于sizeof在编译阶段处理的特性。

由于sizeof不能被编译成机器码,所以sizeof作⽤范围内,也就是()⾥⾯的内容也不能被编译,⽽是被替换成类型。

=操作符返回左操作数的类型,所以a=3相当于int,⽽代码也被替换为:int a = 0;cout<<4<<endl;cout<<a<<endl; 所以,sizeof是不可能⽀持链式表达式的,这也是和⼀元操作符不⼀样的地⽅。

sizeof 计算表达式

sizeof 计算表达式

sizeof 计算表达式sizeof 是C语言中的一个操作符,用于计算变量或数据类型所占用的字节数。

通过sizeof 可以在编程中准确地获取变量或数据类型的字节大小,从而在内存管理和数据处理中起到重要的作用。

在C语言中,sizeof 是一个单目运算符,用于计算操作数的字节大小。

sizeof 可以用于计算各种数据类型的字节大小,包括基本数据类型、数组、结构体等。

下面是几个常见的sizeof 用法示例:1. 计算基本数据类型的字节大小:sizeof(int):计算int 类型的字节大小,一般为4个字节。

sizeof(float):计算float 类型的字节大小,一般为4个字节。

sizeof(double):计算double 类型的字节大小,一般为8个字节。

sizeof(char):计算char 类型的字节大小,一般为1个字节。

2. 计算数组的字节大小:int arr[5] = {1, 2, 3, 4, 5};int size = sizeof(arr); // 计算数组arr 的字节大小,一般为20个字节(5个int 类型元素,每个元素占用4个字节)。

3. 计算结构体的字节大小:struct Student {int id;char name[20];float score;};struct Student stu;int size = sizeof(stu); // 计算结构体stu 的字节大小,一般为28个字节(4个字节的int 类型,20个字节的char 数组,4个字节的float 类型)。

sizeof 运算符返回的结果是一个整数值,表示操作数所占用的字节数。

sizeof 运算符在编译时求值,不会对操作数进行实际计算,因此可以用于在程序中动态获取数据类型的字节大小。

需要注意的是,sizeof 运算符计算的是类型的字节大小,而不是变量的实际大小。

对于指针类型的变量,sizeof 运算符计算的是指针本身的字节大小,而不是指针所指向的数据类型的字节大小。

sizeof函数用法

sizeof函数用法

sizeof函数用法摘要:一、sizeof 函数简介1.sizeof 函数的作用2.数据类型长度3.函数原型二、sizeof 函数用法1.用法一:计算数组大小2.用法二:计算字符串长度3.用法三:计算结构体大小4.用法四:计算联合体大小5.用法五:计算枚举类型大小三、sizeof 函数注意事项1.不可用于判断数组越界2.不可用于判断字符串结束符3.结果与编译器相关正文:sizeof 函数是C 语言中一个非常常用的函数,它的主要作用是计算数据类型的大小。

在计算机中,每个数据类型都有其固定的长度,比如int 类型通常是4 字节,char 类型通常是1 字节。

sizeof 函数就是用来获取这些数据类型的大小的。

sizeof 函数的原型为:`size_t sizeof(类型名)`。

其中,`size_t`是一个与平台相关的类型,表示数据类型的大小。

在32 位系统中,`size_t`通常是`int`类型,而在64 位系统中,`size_t`通常是`long`类型。

sizeof 函数的用法有很多,下面我们来详细了解一下:1.用法一:计算数组大小当我们需要知道数组的大小时,可以使用sizeof 函数。

比如,有一个字符数组`char arr[10]`,我们可以使用`sizeof(arr)`来计算数组的大小。

需要注意的是,这里计算的是数组本身的大小,而不是数组中元素的大小。

2.用法二:计算字符串长度在C 语言中,字符串是以字符数组的形式存储的,通常会在字符串的结尾加上一个空字符("0")作为字符串的结束标志。

当我们需要知道字符串的长度时,可以使用sizeof 函数。

比如,有一个字符串`char str[] = "hello"`,我们可以使用`sizeof(str) - 1`来计算字符串的长度。

注意要减去1,因为空字符不计入字符串长度。

3.用法三:计算结构体大小当我们需要知道结构体的大小时,可以使用sizeof 函数。

详细解析sizeof()

详细解析sizeof()

一、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为unsignedint类型。

该类型保证能容纳实现所建立的最大对象的字节大小。

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。

c语言中sizeof的用法

c语言中sizeof的用法

c语言中sizeof的用法1. sizeof()函数是C语言中最常用的一个内置(built-in)函数,它可以获取指定变量或者类型的大小,单位是字节(byte)。

这个函数可以用在任何表达式中,可以通过把函数放入括号中可以获得其结果,比如:a = sizeof (int);2. sizeof()函数可以获取宏定义(macro definition)、数据类型、结构体(struct)和数组的大小,比如:#define MAXSIZE 100 //宏定义变量struct student {char name[20];int grade;};char c[] = "hello world";3. sizeof()函数的两种用法:(1)通过变量作为参数:int a = 10;b = sizeof (a); //b = 4;(2)通过数据类型作为参数:4. 在C语言中,sizeof()函数不管参数是什么,结果都是字节(byte)为单位,这也就是说如果变量数据类型为int时,sizeof()函数获取的结果就是4字节;而char型变量,sizeof()函数获取的结果就是1字节。

5. C语言中sizeof()函数的使用场景有:(1)在函数中,使用sizeof()函数把一个数组里的元素个数和每个元素的大小结合起来,就可以确定数组的总大小。

(2)当构造一个动态分配的数组时,由于动态分配的变量的类型不一定,因此可以使用sizeof()函数获取分配的数组大小,以便保证空间的足够分配。

(3)sizeof()函数还可以用来作类型转换,通过它可以把一个原始类型转换成另一种类型,例如将char型变量转换成int型变量。

6.总结sizeof()函数是C语言中最常用的内置函数,可以获取指定变量或者类型的大小,用于数组大小的计算,动态内存空间的分配,以及一些类型转换。

sizeof函数

sizeof函数

sizeof函数
Sizeof 函数是C语言中非常有用的一个函数,主要用于求出类型或变量所占内存字节数。

本文将介绍Sizeof函数及其使用。

一、什么是Sizeof函数
Sizeof函数即返回变量的字节数的函数,就是求取一个变量的字节数,比如int 类型变量是4个字节。

Sizeof函数的作用是返回某个表达式或某个变量在内存中所占的字节数。

二、Sizeof函数用法
1、用于求某个数据类型的字节长度:
Sizeof(数据类型名称)
2、对变量求字节长度:
Sizeof(变量名称)
3、计算某个字符串的字节长度:
Sizeof(“字符串”)
三、Sizeof函数的优点
1、可以有效的分配内存空间,在编程中可以提升程序性能。

2、实现多种变量的存储大小的比较,以便节省程序的存储空间,不浪
费系统资源。

3、用于检查内存上的指针是否被正确定义,从而减少程序出错的概率。

四、Sizeof函数的缺点
1、在求结构体或联合体内存字节数上有误差。

2、不能立即计算出数组的长度,可以利用VLA(可变长数组)实现,但
是在GCC编译器中还有一定的问题。

3、由于某些操作系统对word的大小不一样,在不同的操作系统上,sizeof的返回值也不一样。

五、总结
sizeof函数是C语言中的一个很常用的函数,作用是返回某个表达式或
某个变量在内存中所占的字节数。

它可以有效的分配内存空间,在编
程中可以提升程序性能,同时也可以帮助我们减少程序出错的概率。

但是sizeof也有一定的局限性,所以在使用sizeof前我们应该多加注意,以免引发预料之外的错误。

sizeof用法 c语言

sizeof用法 c语言

sizeof用法 c语言在C语言中,sizeof是一个非常有用的运算符,它可以用于获取数据类型或对象的大小,以字节为单位。

这对于内存管理、动态分配和大小调整等方面非常重要。

本文将介绍sizeof在C语言中的用法。

一、基本概念sizeof运算符返回一个类型或对象所占的字节大小。

它只能用于数据类型(如int、float、char等)或对象(如数组、结构体等)。

sizeof的结果是一个整数,表示所求对象的大小(以字节为单位)。

二、用法示例1.获取数据类型的大小可以使用sizeof运算符来获取常见数据类型的大小,例如:```cinti=10;printf("%lu\n",sizeof(i));//输出4,表示int类型占4个字节```2.获取数组的大小可以通过sizeof运算符获取数组的大小,例如:```cintarr[5]={1,2,3,4,5};printf("%lu\n",sizeof(arr));//输出20,表示arr数组占20个字节(4个字节的指针+5个元素的*3个字节+一个结尾标志)```3.获取结构体的大小可以为一个结构体分配内存,并使用sizeof运算符获取其大小。

例如:```cstructMyStruct{inti;charc;};structMyStructs;printf("%lu\n",sizeof(s));//输出8,表示MyStruct结构体占8个字节(包括成员变量i和c所占的字节)```三、注意事项sizeof运算符返回的是对象或类型在内存中的大小,而不是其在磁盘上的大小。

它不考虑对齐和填充字节。

此外,sizeof的结果是编译时常量,可以在代码中直接使用。

四、应用场景sizeof运算符在C语言中应用非常广泛,例如:1.动态内存分配:在使用malloc()或calloc()函数分配内存时,可以使用sizeof运算符确定分配的大小。

sizeof用法示例

sizeof用法示例

1、空类的sizeof是1。

空类是指没有成员的类,类中的函数不占空间,除非是虚函数。

如: class A{public:A(){}~A(){}void fun(){}};sizeof(A)是1.注: class A1{public:A1(){}~A1(){}void fun(){}char a[0];};sizeof(A1)也是1.(VC6.0下编译)2、若类中包含成员,则类对象的大小只包括其中非静态成员经过对齐所占的空间,对齐方式和结构体相同。

如:class A{public:int b;float c;char d;sizeof(A)是12.class A{public:static int a;int b;float c;char d;};sizeof(A)是12.class A{public:static int a;int b;float c;char d;int add(int x,int y){return x+y;}};sizeof(A)也是12.3、若类中包含虚函数,则无论有几个虚函数,sizeof类都等于sizeof(数据成员)的和+sizeof(V表指针,为4),如:class Base{public:Base(){cout<<"Base-ctor"<<endl;}~Base(){cout<<"Base-dtor"<<endl;}int a;virtual void f(int) {cout<<"Base::f(int)"<<endl;}virtual void f(double){cout<<"Base::f(double)"<<endl;}};sizeof(Base)为8.4、对于子类,它的sizeof是它父类成员(无论成员是public或private),再加上它自己的成员,对齐后的sizeof,如:class A2{public:int a;private:char b;};class A3:public A2{public:char b;short a;};sizeof(A3)是8. 但如果A3如下:class A3:public A2{public:short a;char b;};sizeof(A3)是12.5、对于子类和父类中都有虚函数的情况,子类的sizeof是它父类成员(无论成员是public或private),再加上它自己的成员,对齐后的sizeof,再加4(虚表指针)。

sizeof()函数用法汇总

sizeof()函数用法汇总

sizeof()函数用法汇总1. 与strlen()比较strlen计算字符数组的字符数,以“\0"为结束符,不计算“\0"为数组元素。

sizeof()计算数据(数组、变量、类型、结构体等)所占空间,用字节数表示。

2.指针与静态数组的sizeof操作指针均可看为变量类型的一种,所有指针变量的sizeof操作结果均为4 。

(这个已实践证明)所以不要用下面的方式去计算一个字符数组的长度:char *a= "nihaomao";int count = sizeof(a);//返回值为4而应该使用下面的方式计算:char a[] = "nihaomao";int count = sizeof(a);返回值为1*8=8int a[10];sizeof(a)则返回值为4*10=40 。

PS:数组做形参时,数组名称被当做指针使用。

例如:(已验证)void fun(char p[]) {sizeof(p); //返回值为4}经典问题:double* (*a)[3][6];cout<<sizeof(a)<<endl; // 4 a为指针cout<<sizeof(*a)<<endl; // 72 *a为一个有3*6个指针元素的数组cout<<sizeof(**a)<<endl; // 24 **a为数组一维的6个指针cout<<sizeof(***a)<<endl; // 4 ***a为一维的第一个指针cout<<sizeof(****a)<<endl; // 8 ****a为一个double变量问题解析:a是一个很奇怪的定义,他表示一个指向double*[3][6]类型数组的指针。

既然是指针,所以sizeof(a)就是4。

既然a是执行double*[3][6]类型的指针,*a就表示一个double*[3][6]的多维数组类型,因此sizeof(*a)=3*6*sizeof(double*)=72。

C语言:sizeof用法

C语言:sizeof用法

C语言:sizeof用法
sizeof是C语言中一个很重要的操作符,用来计算数据类型或变量所占内存大小,获取数据类型或变量的字节数。

sizeof操作符是在编译期计算运行的,返回的结果是一个整数常量。

1. 计算数据类型的大小,语法形式为:sizeof(数据类型)
例如,计算int类型的大小:
int size = sizeof(int);
sizeof操作符的返回值:
sizeof的一些注意事项:
2. sizeof返回的值是一个无符号整数,因此需要注意类型转换。

3. 在声明数组时,可以使用sizeof操作符来确定数组长度,如:
int arr[] = {1, 2, 3, 4};
int n = sizeof(arr)/sizeof(int);
这里使用sizeof(arr)计算数组arr的大小,再除以sizeof(int)来得到数组的长度。

这里使用sizeof(struct student)来计算结构体student的大小。

5. 对于指针类型的变量,sizeof操作符计算的是指针变量所占的内存空间大小,而
不是指针所指向的内存空间大小。

如:
int* p;
int size = sizeof(p); //返回值为4或8,与指针占用的内存空间大小有关,而不是指针所指向的内存空间大小。

总之,sizeof操作符在C语言中是一个非常重要的操作符,可以用于计算各种数据类型或变量在内存中占用的字节数,具有很高的实用价值。

因此,在编写C程序时,要充分
利用sizeof操作符,合理使用其功能,以提高程序的效率。

c语言的sizeof函数

c语言的sizeof函数

c语言的sizeof函数sizeof是C语言中的一个运算符,用来获取一个数据类型或变量的字节大小。

它并不是一个函数,而是在编译时计算的一个常量表达式。

在C语言中,不同的数据类型占用的字节数是不同的。

使用sizeof 操作符可以获取到不同数据类型的字节大小。

sizeof的语法如下:sizeof(数据类型/变量)下面我将详细解释sizeof的用法和特点:1. sizeof的返回值:- 对于数据类型,sizeof返回对应类型占用的字节数;- 对于变量,sizeof返回该变量的字节大小。

2. sizeof作用于基本数据类型:- sizeof(char):返回1,因为char类型占用1个字节;- sizeof(int):返回4,因为int类型通常占用4个字节(取决于编译器和系统);- sizeof(float):返回4,因为float类型通常占用4个字节(取决于编译器和系统);- sizeof(double):返回8,因为double类型通常占用8个字节(取决于编译器和系统);- sizeof(long):返回4或8,根据编译器和系统的不同,long类型可能占用4个或8个字节;- sizeof(long long):返回8,因为long long类型通常占用8个字节(取决于编译器和系统)。

3. sizeof作用于数组:- sizeof(数组名):返回整个数组占用的字节数;- sizeof(数组名)/sizeof(数组元素类型):返回数组的元素个数。

例如,对于int arr[5],使用sizeof(arr)可以得到整个数组所占用的字节数,通常为20(每个int类型占用4个字节),而sizeof(arr)/sizeof(int)可以得到该数组的元素个数,即54. sizeof作用于指针:- sizeof(指针类型):返回指针本身所占用的字节数;- sizeof(*指针类型):返回指针所指向的类型的字节数。

例如,对于int* ptr,使用sizeof(ptr)可以得到指针所占用的字节数,通常为4或8(取决于编译器和系统),而sizeof(*ptr)可以得到指针指向的类型int所占用的字节数,通常为45. sizeof的局限性:- 对于动态分配的内存,sizeof不能直接获取该内存块的大小;- 对于指针指向的数组时,sizeof只能返回指针本身的大小,无法获取整个数组的大小。

sizeof在c语言中的用法

sizeof在c语言中的用法

sizeof在c语言中的用法一级标题:C语言中的sizeof用法介绍:在C语言中,sizeof是一种用于确定数据类型大小的运算符。

它可以用来获取变量、数据类型或表达式所占用的内存空间大小。

本文将详细介绍C语言中sizeof 的用法,并阐述其在不同情况下的应用。

二级标题一:sizeof基本用法在C语言中,sizeof运算符通常与变量、数据类型和表达式一起使用。

其基本语法如下:sizeof(operand)其中,operand可以是以下几种形式之一:1. 单个变量2. 数据类型3. 表达式当operand为单个变量时,sizeof将返回该变量所占用的字节数。

例如,对于整型变量x,可以使用以下代码查看其所占空间大小:```int x;int size = sizeof(x);```此时,size将被赋值为x所占内存空间的字节数。

当operand为数据类型时,sizeof将返回该数据类型所占用的字节数。

例如,我们可以通过以下方式获得字符型所占内存空间大小:```int size = sizeof(char);```此时,size将被赋值为字符型数据类型所占字节数。

如果operand为表达式,则表达式会先被求解,然后根据求解结果返回相应字节数。

例如,在如下代码片段中:```int x = 5;int size = sizeof(x + 3);```表达式x + 3将先求解为8,然后sizeof运算符返回这个结果所占字节数。

二级标题二:特殊情况下的sizeof用法除了上述基本用法外,sizeof在某些特殊情况下还有其他用途。

1. 数组名作为操作数当数组名作为sizeof的操作数时,sizeof将返回整个数组所占空间大小,而不是指向数组的指针类型所占字节数。

例如:```int arr[5];int size = sizeof(arr); // 返回整个数组arr的大小```此时,size将被赋值为整个数组arr所占空间的字节数。

c语言sizeof函数用法

c语言sizeof函数用法

c语言sizeof函数用法
sizeof函数是C语言中的一个重要运算符,它的作用是获取某一变量或数据类型所占的内存空间,具体用法如下:
一、语法格式:
sizeof(变量名) 或者 sizeof(数据类型)
二、用法介绍:
1. size语句用于获得变量或数据类型的内存空间大小,且返回值类型均为整数;
2. 对于整型变量,sizeof返回值为4;
3. 对于字符型变量,sizeof返回值为1;
4. 对于双精度型变量,sizeof返回值为8;
5. 对于字符串,sizeof返回结果为字符串的长度,实质上是一个字节的基本单位;
6. 对于数组,sizeof返回结果为整个数组的内存大小,实质上是一个字节的基本单位;
7. 对于结构体变量,sizeof返回结果为结构体变量的内存大小,实质上是一个字节的基本单位;
8. 对于结构体指针,sizeof返回结果为该指针变量的内存大小,实质上是一个字节的基本单位。

三、使用示例:
1. 对单誓变量:
int num=10;
int result = sizeof(num); //结果为4 2. 对数组变量:
int arr[20];
int result = sizeof(arr); //结果为80 3. 对字符串变量:
char str[20]="hello";
int result = sizeof(str); //结果为20。

sizeof(buf)的用法

sizeof(buf)的用法

sizeof(buf)的用法1.介绍在C语言中,我们经常需要获取变量或数据类型的大小。

而`s iz eo f()`是一个常用的操作符,用于返回其参数在内存中所占用的字节数。

本文将详细介绍`si ze of(b uf)`的用法。

2.基本语法`s iz eo f`操作符的基本语法如下:s i ze of(t yp e)其中,`ty pe`可以是数据类型(如`int`、`fl oa t`、`cha r`等)或变量名。

3.用法示例下面通过几个示例来说明`s iz eo f(bu f)`的具体用法。

3.1获取不同数据类型的大小#i nc lu de<s td io.h>i n tm ai n(){p r in tf("si ze of(in t):%l u\n",s iz eof(in t));p r in tf("si ze of(fl o at):%l u\n",s ize o f(fl oa t));p r in tf("si ze of(ch a r):%lu\n",si zeo f(c ha r));p r in tf("si ze of(do u bl e):%lu\n",siz e of(d ou bl e));r e tu rn0;}运行以上代码,将得到如下输出:s i ze of(i nt):4s i ze of(f l o at):4s i ze of(c ha r):1s i ze of(d ou bl e):8通过`s iz eo f()`操作符,我们可以得到不同数据类型在当前环境中所占用的字节数。

在上述示例中,`in t`和`f lo at`类型各占用4个字节,`c ha r`类型占用1个字节,而`do ub le`类型则占用8个字节。

3.2获取数组的大小#i nc lu de<s td io.h>i n tm ai n(){i n ta rr[5];p r in tf("数组ar r的大小:%l u\n",s iz e of(a rr));r e tu rn0;}运行以上代码,将得到如下输出:数组ar r的大小:20在这个示例中,我们声明了一个名为`arr`的整型数组,由于数组中有5个元素,而每个`i nt`类型元素占用4个字节,因此整个数组`a rr`占用20个字节。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

sizeof()功能:计算数据空间的字节数
1.与strlen()比较
strlen()计算字符数组的字符数,以"\0"为结束判断,不计算为'\0'的数组元素。

而sizeof计算数据(包括数组、变量、类型、结构体等)所占内存空间,用字节数表示。

2.指针与静态数组的sizeof操作
指针均可看为变量类型的一种。

所有指针变量的sizeof 操作结果均为4。

注意:int *p; sizeof(p)=4;
但sizeof(*p)相当于sizeof(int);
对于静态数组,sizeof可直接计算数组大小;
例:int a[10];char b[]="hello";
sizeof(a)等于4*10=40;
sizeof(b)等于6;
注意:数组做型参时,数组名称当作指针使用!!
void fun(char p[])
{sizeof(p)等于4}
经典问题:
double* (*a)[3][6];
cout<<sizeof(a)<<endl; // 4 a为指针
cout<<sizeof(*a)<<endl; // 72 *a为一个有3*6个指针元素的数组 cout<<sizeof(**a)<<endl; // 24 **a为数组一维的6个指针
cout<<sizeof(***a)<<endl; // 4 ***a为一维的第一个指针
cout<<sizeof(****a)<<endl; // 8 ****a为一个double变量
问题解析:a是一个很奇怪的定义,他表示一个指向double*[3][6]类型数组的指针。

既然是指针,所以sizeof(a)就是4。

既然a是执行double*[3][6]类型的指针,*a就表示一个double*[3][6]的多维数组类型,因此sizeof(*a)=3*6*sizeof(double*)=72。

同样的,**a表示一个double*[6]类型的数组,所以sizeof(**a)=6*sizeof (double*)=24。

***a就表示其中的一个元素,也就是double*了,所以sizeof(***a)=4。

至于****a,就是一个double了,所以sizeof(*** *a)=sizeof(double)=8。

3.格式的写法
sizeof操作符,对变量或对象可以不加括号,但若是类型,须加括号。

4.使用sizeof时string的注意事项
string s="hello";
sizeof(s)等于string类的大小,sizeof(s.c_str())得到的是与字符串长度。

5.union 与struct的空间计算
总体上遵循两个原则:
(1)整体空间是占用空间最大的成员(的类型)所占字节数的整倍数
(2)数据对齐原则----内存按结构成员的先后顺序排列,当排到该成员变量时,其前面已摆放的空间大小必须是该成员类型大小的整倍数,如果不够则补齐,以此向后类推。

注意:数组按照单个变量一个一个的摆放,而不是看成整体。

如果成员中有自定义的类、结构体,也要注意数组问题。

例:[引用其他帖子的内容]
因为对齐问题使结构体的sizeof变得比较复杂,看下面的例子:(默认对齐方式下)
struct s1
{
char a;
double b;
int c;
char d;
};
struct s2
{
char a;
char b;
int c;
double d;
};
cout<<sizeof(s1)<<endl; // 24
cout<<sizeof(s2)<<endl; // 16
同样是两个char类型,一个int类型,一个double类型,但是因为对齐问题,导致他们的大小不同。

计算结构体大小可以采用元素摆放法,我举例子说明一下:首先,CPU判断结构体的对界,根据上一节的结论,s1和s2的对界都取最大的元素类型,也就是double类型的对界8。

然后开始摆放每个元素。

对于s1,首先把a放到8的对界,假定是0,此时下一个空闲的地址是1,但是下一个元素d 是double类型,要放到8的对界上,离1最接近的地址是8了,所以d被放在了8,此时下一个空闲地址变成了16,下一个元素c的对界是4,16可以满足,所以c放在了16,此时下一个空闲地址变成了20,下一个元素d需要对界1,也正好落在对界上,所以d放在了20,结构体在地址21处结束。

由于s1的大小需要是8的倍数,所以21-23的空间被保留,s1的大小变成了24。

对于s2,首先把a放到8的对界,假定是0,此时下一个空闲地址是1,下一个元素的对界也是1,所以b摆放在1,下一个空闲地址变成了2;下一个元素c的对界是4,所以取离2最近的地址4摆放c,下一个空闲地址变成了8,下一个元素d的对界是8,所以d摆放在8,所有元素摆放完毕,结构体在15处结束,占用总空间为16,正好是8的倍数。

这里有个陷阱,对于结构体中的结构体成员,不要认为它的对齐方式就是他的大小,看下面的例子:
struct s1
{
char a[8];
};
struct s2
{
double d;
};
struct s3
{
s1 s;
char a;
};
struct s4
{
s2 s;
char a;
};
cout<<sizeof(s1)<<endl; // 8
cout<<sizeof(s2)<<endl; // 8
cout<<sizeof(s3)<<endl; // 9
cout<<sizeof(s4)<<endl; // 16;
s1和s2大小虽然都是8,但是s1的对齐方式是1,s2是8(double),所以在s3和s4中才有这样的差异。

所以,在自己定义结构体的时候,如果空间紧张的话,最好考虑对齐因素来排列结构体里的元素。

补充:不要让double干扰你的位域
在结构体和类中,可以使用位域来规定某个成员所能占用的空间,所以使用位域能在一定程度上节省结构体占用的空间。

不过考虑下面的代码:
struct s1
{
int i: 8;
int j: 4;
double b;
int a:3;
};
struct s2
{
int i;
int j;
double b;
int a;
};
struct s3
{
int i;
int j;
int a;
double b;
};
struct s4
{
int i: 8;
int j: 4;
int a:3;
double b;
};
cout<<sizeof(s1)<<endl; // 24
cout<<sizeof(s2)<<endl; // 24
cout<<sizeof(s3)<<endl; // 24
cout<<sizeof(s4)<<endl; // 16
可以看到,有double存在会干涉到位域(sizeof的算法参考上一节),所以使用位域的的时候,最好把float类型和double类型放在程序的开始或者最后。

相关常数:
sizeof int:4
sizeof short:2
sizeof long:4
sizeof float:4
sizeof double:8
sizeof char:1
sizeof p:4
sizeof WORD:2
sizeof DWORD:4。

相关文档
最新文档