sizeof()用法汇总

合集下载

sizeof的用法

sizeof的用法

sizeof的用法在C语言中,sizeof是一种用于计算数据类型或变量所占用空间大小的运算符。

它可以用于计算任何数据类型或变量的大小,包括基本数据类型、数组、结构体等。

sizeof的用法非常灵活,下面我们将详细介绍它的用法和注意事项。

1. 基本数据类型的大小首先,我们来看一下基本数据类型的大小。

在C语言中,基本数据类型有char、int、float、double等。

我们可以使用sizeof运算符来计算它们的大小,例如:```printf('char类型的大小为:%d', sizeof(char));printf('int类型的大小为:%d', sizeof(int));printf('float类型的大小为:%d', sizeof(float));printf('double类型的大小为:%d', sizeof(double));```输出结果为:```char类型的大小为:1int类型的大小为:4float类型的大小为:4double类型的大小为:8```从输出结果可以看出,char类型占用1个字节,int和float类型占用4个字节,而double类型占用8个字节。

这是因为不同的数据类型在内存中占用的空间大小是不同的。

需要注意的是,sizeof返回的是一个无符号整数,因此在使用printf函数输出时需要使用%u格式符,而不是%d格式符。

2. 数组的大小接下来,我们来看一下数组的大小。

在C语言中,数组的大小等于数组元素的个数乘以每个元素的大小。

我们可以使用sizeof运算符来计算数组的大小,例如:```int a[5] = {1, 2, 3, 4, 5};printf('数组a的大小为:%u', sizeof(a));```输出结果为:```数组a的大小为:20```从输出结果可以看出,数组a的大小为20个字节,即5个int 类型的元素,每个元素占用4个字节。

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在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运算符时需要特别注意一些情况。

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

c语言中sizeof的用法举例

c语言中sizeof的用法举例

c语言中sizeof的用法举例在C语言中,sizeof是一个用于计算数据类型或变量所占字节数的运算符。

它可以用于计算各种数据类型的大小,包括基本数据类型、数组、结构体和联合体等。

下面是一些使用sizeof运算符的示例:1. 计算基本数据类型的大小:c#include <stdio.h>int main() {printf("int类型的大小为:%zu 字节\n", sizeof(int));printf("float类型的大小为:%zu 字节\n", sizeof(float));printf("char类型的大小为:%zu 字节\n", sizeof(char));printf("double类型的大小为:%zu 字节\n", sizeof(double));return 0;}输出:int类型的大小为:4 字节float类型的大小为:4 字节char类型的大小为:1 字节double类型的大小为:8 字节2. 计算数组的大小:c#include <stdio.h>int main() {int arr[] = {1, 2, 3, 4, 5};int size = sizeof(arr) / sizeof(arr[0]);printf("数组的大小为:%d\n", size);return 0;}输出:数组的大小为:53. 计算结构体的大小:c#include <stdio.h>struct Student {char name[20];int age;float score;};int main() {struct Student stu;printf("结构体的大小为:%zu 字节\n", sizeof(stu));return 0;}输出:结构体的大小为:28 字节4. 计算联合体的大小:c#include <stdio.h>union Data {int num;float f;char str[20];};int main() {union Data data;printf("联合体的大小为:%zu 字节\n", sizeof(data));return 0;}输出:联合体的大小为:20 字节5. 计算指针类型的大小:c#include <stdio.h>int main() {int *ptr;printf("指针的大小为:%zu 字节\n", sizeof(ptr));return 0;}输出:指针的大小为:8 字节(在64位系统上)6. 计算自定义类型的大小:c#include <stdio.h>typedef struct {int x;int y;} Point;int main() {Point p;printf("自定义类型的大小为:%zu 字节\n", sizeof(p));return 0;}输出:自定义类型的大小为:8 字节总结: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是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。

sizeof函数用法

sizeof函数用法

sizeof函数用法【最新版】目录1.sizeof 函数的定义与功能2.sizeof 函数的语法与参数3.sizeof 函数的返回值4.sizeof 函数的典型应用实例5.sizeof 函数的注意事项正文一、sizeof 函数的定义与功能sizeof 函数是 C 语言和 C++语言中用于获取数据类型或变量大小的函数,其功能是返回数据类型或变量在内存中所占用的字节数。

二、sizeof 函数的语法与参数sizeof 函数的语法为:sizeof(数据类型或变量)参数:可以是数据类型,也可以是变量。

如果是变量,那么该变量必须是已定义的。

三、sizeof 函数的返回值sizeof 函数的返回值是数据类型或变量在内存中所占用的字节数,单位为字节。

四、sizeof 函数的典型应用实例1.获取数据类型的大小如:int a = 10; cout << sizeof(a) << endl; 输出结果为 4,表示 int 类型在内存中占用 4 个字节。

2.获取数组大小的整数倍如:int arr[] = {1, 2, 3, 4, 5}; cout << sizeof(arr) / sizeof(arr[0]) << endl; 输出结果为 5,表示数组 arr 中元素个数为5。

3.获取结构体大小的整数倍如:typedef struct { int a; int b; } MyStruct; cout << sizeof(MyStruct) << endl; 输出结果为 8,表示结构体 MyStruct 在内存中占用 8 个字节。

五、sizeof 函数的注意事项1.sizeof 函数只能用于获取数据类型或变量的大小,不能用于计算其他值。

2.sizeof 函数在计算结构体大小时,只计算结构体成员的大小,不考虑成员之间的排列方式。

3.sizeof 函数在计算数组大小时,返回的是数组所占用的总字节数,而不是数组中元素的个数。

c语言中sizeof的含义

c语言中sizeof的含义

c语言中sizeof的含义
在C语言中,sizeof是一个用于计算数据类型或变量占用字节大小的运算符。

它可以被用于计算任何数据类型、变量或表达式的大小。

sizeof运算符返回的结果
是一个无符号整数,表示指定对象所占用的字节数。

使用sizeof运算符可以帮助程序员在编写代码时更好地控制和管理内存。

在计
算数据类型的大小时,它会考虑编译器对类型所做的对齐和填充处理。

这意味着sizeof运算符返回的结果可能会比直观的数据类型大小略大。

sizeof运算符主要有两种用法:
1. sizeof(数据类型)
这种用法可以用来计算指定数据类型所占用的字节数。

例如,sizeof(int)将返
回整数类型(int)在当前平台上所占用的字节数。

这对于确定数据类型的字节大小非
常有用,特别是在编写与底层内存相关的代码时。

2. sizeof(变量或表达式)
这种用法将返回指定变量或表达式的字节数。

例如,如果有一个整数变量x,我们可以使用sizeof(x)来计算变量x所占用的字节数。

同样地,我们也可以使用sizeof(x + 1)来计算表达式(x + 1)的字节数。

需要注意的是,sizeof运算符在编译时计算大小,而不是运行时。

这意味着它
可以用于计算静态分配的数组大小,但无法用于动态分配的内存块的大小。

总结起来,C语言中的sizeof运算符用于计算数据类型、变量或表达式所占用
的字节数。

它是一个在编译时计算大小的运算符,可以帮助程序员更好地管理内存。

在编写底层或与内存相关的代码时,了解和正确使用sizeof运算符非常重要。

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的用法以下代码使用平台是Windows7 64bits+VS2012。

sizeof是C/C++中的一个操作符(operator),其作用就是返回一个对象或者类型所占的内存字节数,使用频繁,有必须对齐有个全面的了解。

1.Sizeof的基本语法sizeof有三种语法形式,如下:(1)sizeof( object ); // sizeof( 对象);(2)sizeof( type_name ); // sizeof( 类型);(3)sizeof object; // sizeof 对象;第三种语法结构虽然正确,为简单统一,均使用一、二中写法。

例如:int i;sizeof( i ); // oksizeof i; // oksizeof( int ); // oksizeof int; // error2.sizeof计算基本类型与表示式sizeof计算对象的大小也是转换成对对象类型的计算,也就是说,同种类型的不同对象其sizeof值都是一致的。

这里,对象可以进一步延伸至表达式,即sizeof可以对一个表达式求值,编译器根据表达式的最终结果类型来确定大小,sizeof是编译时进行运算,与运行时无关,不会对表达式进行计算。

考察如下代码:#include<iostream>using namespace std;int main(int argc,char* argv[]){cout<<"sizeof(char)="<<sizeof(char)<<endl;cout<<"sizeof(short)="<<sizeof(short int)<<endl;cout<<"sizeof(int)="<<sizeof(int)<<endl;cout<<"sizeof(long)="<<sizeof(long int)<<endl;cout<<"sizeof(long long)="<<sizeof(long int int)<<endl;cout<<"sizeof(float)="<<sizeof(float)<<endl;cout<<"sizeof(double)="<<sizeof(double)<<endl;int i=8;cout<<"i="<<i<<endl;cout<<"sizeof(i)="<<sizeof(i)<<endl;cout<<"sizeof(i)="<<sizeof(i=5)<<endl;cout<<"i="<<i<<endl;}在64bits的Windows下运行结果是sizeof(char)=1sizeof(short)=2sizeof(int)=4sizeof(long)=4sizeof(long long)=4sizeof(float)=4sizeof(double)=8i=8sizeof(i)=4sizeof(i)=4i=8注意两点,第一:i的值并未发生改变,表明sizeof括号内的表达式并没有执行,sizeof在编译时求其表达式的运算结果的类型,sizeof运算与运行时无关。

C语言sizeof()用法介绍

C语言sizeof()用法介绍

C语⾔sizeof()⽤法介绍1. 定义sizeof是⼀个操作符(operator)。

其作⽤是返回⼀个对象或类型所占的内存字节数。

2. 语法sizeof有三种语法形式:1) sizeof (object); //sizeof (对象)2) sizeof object; //sizeof 对象3) sizeof (type_name); //sizeof (类型)对象可以是各种类型的变量,以及表达式(⼀般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,编译⽆误1. 基本数据类型的sizeof这⾥的基本数据类型是指short、int、long、float、double这样的简单内置数据类型。

由于它们的内存⼤⼩是和系统相关的,所以在不同的系统下取值可能不同。

2. 结构体的sizeof结构体的sizeof涉及到字节对齐问题。

为什么需要字节对齐?计算机组成原理教导我们这样有助于加快计算机的取数速度,否则就得多花指令周期了。

为此,编译器默认会对结构体进⾏处理(实际上其它地⽅的数据变量也是如此),让宽度为2的基本数据类型(short等)都位于能被2整除的地址上,让宽度为4的基本数据类型(int等)都位于能被4整除的地址上,依次类推。

这样,两个数中间就可能需要加⼊填充字节,所以整个结构体的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运算符确定分配的大小。

c语言的sizeof

c语言的sizeof

c语言的sizeofC语言是一种通用的计算机编程语言,是许多程序员最常用的语言之一。

在C语言中,sizeof是一个非常重要的运算符,它用来计算数据类型或变量在内存中所占的字节数。

sizeof运算符可以用于计算各种数据类型的字节数,包括基本数据类型(如整型、浮点型、字符型等)和自定义数据类型(如结构体、联合体等)。

本文将介绍C语言中sizeof运算符的使用方法和注意事项。

一、sizeof的用法在C语言中,sizeof运算符的一般格式为:sizeof (类型或表达式)其中,类型可以是C语言中的任何数据类型,表达式可以是变量、数组、指针等。

sizeof的计算结果是一个整数值,表示该类型或表达式在内存中所占的字节数。

下面是几个示例:1. 计算整型数据类型的字节数```int n = sizeof(int);```上述代码中,sizeof(int)计算整型数据类型int在内存中所占的字节数,并将结果赋值给变量n。

2. 计算数组的字节数```int arr[10];int size = sizeof(arr);```上述代码中,sizeof(arr)计算整型数组arr在内存中所占的字节数,并将结果赋值给变量size。

3. 计算指针的字节数```int* ptr;int size = sizeof(ptr);```上述代码中,sizeof(ptr)计算整型指针ptr在内存中所占的字节数,并将结果赋值给变量size。

二、sizeof的注意事项1. sizeof运算符的结果是一个常量表达式,它在编译时求值,并不会运行时计算。

因此,sizeof运算符的操作数不能包含变量或表达式,只能是类型名、类型说明符或已定义的结构体/联合体的标识符。

2. 在sizeof运算符中,数组名作为操作数时,计算的是整个数组的字节数。

而指针名作为操作数时,计算的是指针所指向类型的字节数。

3. 注意C语言中的指针与指向数组的指针是不同的概念。

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有三种语法形式:1、sizeof(object); //sizeof(对象);2、sizeof(type_name); //sizeof(类型);3、sizeof object; //sizeof 对象;⼀、基本数据类型的sizeof等于各数据类型在内存中所占的字节数。

这⾥的基本数据类型指的是short、int、long、float等简单的内置数据类型,由于它们和系统相关,所以取值在不同系统下可能会不同,可移植性较差。

如:#include <stdio.h>int main(){int a = sizeof(char);int b = sizeof(short);int c = sizeof(int);int d = sizeof(long);printf("char 长度是 %d 个字节 \n", a);printf("short 长度是 %d 个字节 \n", b);printf("int 长度是 %d 个字节 \n", c);printf("long 长度是 %d 个字节 \n", d);return 0;}运⾏结果为:13:55:58 > char 长度是 1 个字节13:55:58 > short 长度是 2 个字节13:55:58 > int 长度是 4 个字节13:55:58 > long 长度是 4 个字节⼆、指针变量的sizeof等于计算机内部地址总线的宽度。

所以在32位计算机中,⼀个指针变量的返回值必定是4(注意结果是以字节为单位)。

指针变量的sizeof值与指着所指的对象没有任何关系。

三、数组的sizeof数组的sizeof值等于数组所占⽤的内存字节数,如:char a1[] = "abc"; int a2[3]; sizeof( a1 ); // 结果为4,字符末尾还存在⼀个NULL终⽌符 sizeof( a2 ); // 结果为3*4=12(依赖于int,int4个字节) //sizeof当作了求数组元素的个数是不对的,求数组元素的个数写法为:// 总长度/单个元素的长度 int c2 = sizeof( a1 ) / sizeof( a1[0] ); // 总长度/第⼀个元素的长度.注意数组名做函数参数传递时退化为指针。

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是不可能⽀持链式表达式的,这也是和⼀元操作符不⼀样的地⽅。

  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。

相关文档
最新文档