如题所述
sizeofæ¯Cè¯è¨è¿ç®ç¬¦ä¹ä¸ï¼æ³¨ææ¯è¿ç®ç¬¦ï¼ä¸æ¯å½æ°ï¼ä¹ä¸æ¯å®å®ä¹ã
åè½æ¯æ±å ç¨å å大å°ï¼ç»æ为æ 符å·æ´å(unsigned int).
æ两ç§ç¨æ³ï¼
1 ç¨äºç±»åã
æ±æ个类åå ç¨å å大å°ï¼æ¹å¼ä¸º
sizeof(type_name)
å¦sizeof(int), sizeof(struct test)çã
2 ç¨äºåéã
ç¨äºæ±æ个åéå ç¨å å大å°ï¼æ¹å¼ä¸º
sizeof(var)æè sizeof varã
注æï¼ç¨äºåéæ¶å¯ä»¥ä¸å¸¦æ¬å·ï¼ä¸è¿ä¸è¬æ¨è带ä¸æ¬å·ã
åè½æ¯æ±å ç¨å å大å°ï¼ç»æ为æ 符å·æ´å(unsigned int).
æ两ç§ç¨æ³ï¼
1 ç¨äºç±»åã
æ±æ个类åå ç¨å å大å°ï¼æ¹å¼ä¸º
sizeof(type_name)
å¦sizeof(int), sizeof(struct test)çã
2 ç¨äºåéã
ç¨äºæ±æ个åéå ç¨å å大å°ï¼æ¹å¼ä¸º
sizeof(var)æè sizeof varã
注æï¼ç¨äºåéæ¶å¯ä»¥ä¸å¸¦æ¬å·ï¼ä¸è¿ä¸è¬æ¨è带ä¸æ¬å·ã
温馨提示:答案为网友推荐,仅供参考
第1个回答 2014-12-10
sizeof(),括号里填类型名,返回该类型所占字节数,例如n=sizeof(int)将int占字节数2赋给n,即n=2
第2个回答 2014-12-10
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本回答被提问者采纳
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本回答被提问者采纳