笔试总结

1、sizeof

基本上笔试都会考到。

sizeof 操作符的作用是返回一个对象或类型名的字节长度。有以下三种形式:

sizeof(type name);

sizeof(object);

sizeof object;

返回值类型是size_t,这是一种与机器相关的typedef 定义,我们可以在cstddef 头文件中找到它的定义。

当sizeof 操作符作用在数组上时,返回整个数组的字节长度,而不是第一个元素的长度,也不是数组包含的元素个数。例如:

int ia[] = {0, 1, 3};

size_t array_size = sizeof ia; // 3 * 4 = 12

 

int *pi = new int[3];

size_t pointer_size = sizeof(pi); //返回的是指向int型的指针的字节长度:4

 

应用在指针类型上的sizeof 操作符返回的是包含该类型地址所需的内存长度,而应用在引用类型上的sizeof 操作符返回的是包含被引用对象所需的内存长度, 如:

sizeof(short *);//4

sizeof(short &);//2

 

一个string的大小与它所指的字符串的长度无关

string str("This is a string");

sizeof(str);//在我的机器上为4

 

用在字符串数组时:

char ca[] = "This is a  char array";

sizeof ca;//21,需要加上最后一个'/0'

 

在函数中:

func(char *P) {

sizeof(p);//4

}

func(char[] ca) {

sizeof(ca);//4

}

都为指针的长度。

 

当用sizeof 计算struct的字节长度时,要考虑字节对齐,如:

struct node {

    int i;

    char c;

    int j;

    short s;

}

sizeof(node);//16,

一般地,可以通过下面的方法来改变缺省的对齐条件:   
使用伪指令#pragma   pack   (n),编译器将按照n个字节对齐;   
使用伪指令#pragma   pack   (),取消自定义字节对齐方式。   
注意:如果#pragma   pack   (n)中指定的n大于结构体中最大成员的size,则其不起作用,结构体仍然按照size最大的成员进行对齐。

 

sizeof 可以对函数调用求值,返回函数返回值类型的字节长度,函数不会被调用,但不能对函数,不确定类型的表达式以及位域(bit-field) 成员求值。

sizeof(func);//   error   
void   func1()   {}   
sizeof(foo2());//   error   
struct   S   
{   
      unsigned   int   f1   :   1;   
      unsigned   int   f2   :   5;   
      unsigned   int   f3   :   12;   
};   
sizeof(   S.f1   );//   error  

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值