请问C语言中,sizeof怎么用?
发布网友
发布时间:2022-04-28 12:04
我来回答
共3个回答
热心网友
时间:2023-10-08 22:02
sizeof是C语言运算符之一,注意是运算符,不是函数,也不是宏定义。
功能是求占用内存大小,结果为无符号整型(unsigned int).
有两种用法:
1 用于类型。
求某个类型占用内存大小,方式为
sizeof(type_name)
如sizeof(int), sizeof(struct test)等。
2 用于变量。
用于求某个变量占用内存大小,方式为
sizeof(var)或者 sizeof var。
注意,用于变量时可以不带括号,不过一般推荐带上括号。
热心网友
时间:2023-10-08 22:02
sizeof(),括号里填类型名,返回该类型所占字节数,例如n=sizeof(int)将int占字节数2赋给n,即n=2
热心网友
时间:2023-10-08 22:03
2. 语法:
sizeof有三种语法形式,如下:
1) sizeof( object ); // sizeof( 对象 );
2) sizeof( type_name ); // sizeof( 类型 );
3) sizeof object; // sizeof 对象;
所以,
int i;
sizeof( i ); // ok
sizeof i; // ok
sizeof( int ); // ok
sizeof int; // error
既然写法3可以用写法1代替,为求形式统一以及减少我们大脑的负担,第3种写法,忘
掉它吧!
实际上,sizeof计算对象的大小也是转换成对对象类型的计算,也就是说,同种类型的
不同对象其sizeof值都是一致的。这里,对象可以进一步延伸至表达式,即sizeof可以
对一个表达式求值,编译器根据表达式的最终结果类型来确定大小,一般不会对表达式
进行计算。如:
sizeof( 2 );// 2的类型为int,所以等价于 sizeof( int );
sizeof( 2 + 3.14 ); // 3.14的类型为double,2也会被提升成double类型,所以等价
于 sizeof( double );
sizeof也可以对一个函数调用求值,其结果是函数返回类型的大小,函数并不会被调用
,我们来看一个完整的例子:
char foo()
{
printf("foo() has been called.\n");
return 'a';
}
int main()
{
size_t sz = sizeof( foo() ); // foo() 的返回值类型为char,所以sz = sizeof(
char ),foo()并不会被调用
printf("sizeof( foo() ) = %d\n", sz);
}
C99标准规定,函数、不能确定类型的表达式以及位域(bit-field)成员不能被计算s
izeof值,即下面这些写法都是错误的:
sizeof( foo );// error
void foo2() { }
sizeof( foo2() );// error
struct S
{
unsigned int f1 : 1;
unsigned int f2 : 5;
unsigned int f3 : 12;
};
sizeof( S.f1 );// error
热心网友
时间:2023-10-08 22:02
sizeof是C语言运算符之一,注意是运算符,不是函数,也不是宏定义。
功能是求占用内存大小,结果为无符号整型(unsigned int).
有两种用法:
1 用于类型。
求某个类型占用内存大小,方式为
sizeof(type_name)
如sizeof(int), sizeof(struct test)等。
2 用于变量。
用于求某个变量占用内存大小,方式为
sizeof(var)或者 sizeof var。
注意,用于变量时可以不带括号,不过一般推荐带上括号。
热心网友
时间:2023-10-08 22:02
sizeof(),括号里填类型名,返回该类型所占字节数,例如n=sizeof(int)将int占字节数2赋给n,即n=2
热心网友
时间:2023-10-08 22:03
2. 语法:
sizeof有三种语法形式,如下:
1) sizeof( object ); // sizeof( 对象 );
2) sizeof( type_name ); // sizeof( 类型 );
3) sizeof object; // sizeof 对象;
所以,
int i;
sizeof( i ); // ok
sizeof i; // ok
sizeof( int ); // ok
sizeof int; // error
既然写法3可以用写法1代替,为求形式统一以及减少我们大脑的负担,第3种写法,忘
掉它吧!
实际上,sizeof计算对象的大小也是转换成对对象类型的计算,也就是说,同种类型的
不同对象其sizeof值都是一致的。这里,对象可以进一步延伸至表达式,即sizeof可以
对一个表达式求值,编译器根据表达式的最终结果类型来确定大小,一般不会对表达式
进行计算。如:
sizeof( 2 );// 2的类型为int,所以等价于 sizeof( int );
sizeof( 2 + 3.14 ); // 3.14的类型为double,2也会被提升成double类型,所以等价
于 sizeof( double );
sizeof也可以对一个函数调用求值,其结果是函数返回类型的大小,函数并不会被调用
,我们来看一个完整的例子:
char foo()
{
printf("foo() has been called.\n");
return 'a';
}
int main()
{
size_t sz = sizeof( foo() ); // foo() 的返回值类型为char,所以sz = sizeof(
char ),foo()并不会被调用
printf("sizeof( foo() ) = %d\n", sz);
}
C99标准规定,函数、不能确定类型的表达式以及位域(bit-field)成员不能被计算s
izeof值,即下面这些写法都是错误的:
sizeof( foo );// error
void foo2() { }
sizeof( foo2() );// error
struct S
{
unsigned int f1 : 1;
unsigned int f2 : 5;
unsigned int f3 : 12;
};
sizeof( S.f1 );// error