unsigned

小说:赚客钥匙平台作者:顺文平更新时间:2018-11-16字数:36153

黑衣人看着王小民,而后接着道:“我们就是干这个的,谁给我们钱,我们兄弟就给谁卖命。”

点击类网赚

“我和他们不是一伙的,你可别这么看我”叶扬急忙说道。在华夏国,可是不乏帮人被诬赖的例子,叶扬可不想在这岛国也被诬赖了。
花叶道:“实不相瞒,这艘游轮乃是我们落云宫的产业,见到修真界同道,自然是要见上一见的。”

李峰大喜。准备挂机。猛想起一事。又道:“对了。黄枫那家伙要跳河自杀。被我们捞上来捆住了。你最好痛骂他一顿。这个傻子。脑袋真是让驴子给踢了。他竟然主动与张冬晓分手……”

unsigned


1.知识点

(1)sizeof是一个单目运算发,而不是一个函数,其用于获取操作数所占内存空间的字节数。

(2)sizeof的操作数可以使类型名,也可以是表达式,如果是类型名则直接获得该类型所占字节数,如果是表达式,则先分析表达式结果的类型,再根据类型确定所占字节数,并不对表达式进行实际计算。

1 int a = 1;
2 double b = 1.5;
3 sizeof(int);//结果为4
4 sizeof(a);    //结果为4
5 sizeof(b);    //结果为8

(3)sizeof很少单独使用,而是和内存分配或者计算法数组长度等需求进行配合使用。

1 //与内存空间分配配合使用
2 int *ptr = (int *)malloc(sizeof(int) * 20);
3 //与计算数组长度配合使用
4 int count = sizeof(darray) / sizeof(double);

(4)数组名作为操作数时,将获得整个数组所占空间,当数组名作为实参传递给子函数时,此时数组名已经成为了指针,其计算结果将是指针的所占空间。

void subfunc(double darray[]) {
    cout << sizeof(darray) / sizeof(double) << endl;    //输出4/8=0
}
int main(int argc, char *argv[]) {
    double darray[20];
    cout << sizeof(darray) / sizeof(double) << endl;        //输出16/8=20
    subfunc(darray);
    getchar();
    return 0;
}

(5)在计算字符串长度时要用strlen。sizeof是一个运算符,用于获取类型或表达式的所占内存大小;strlen是一个函数,用于计算字符串中字符的个数,其中字符串结尾符不会被计算在内。

2.面试题

2.1不能使用sizeof计算的表达式

 1 struct baby
 2 {
 3     unsigned int gender : 1;
 4     unsigned int weight : 5;
 5     unsigned int week : 7;
 6     unsigned int blood : 3;
 7     unsigned int height : 8;
 8 };
 9 int triple(int number) {
10     return 3 * number;
11 }
12 int main(int argc, char *argv[]) {
13     sizeof(baby);    //A
14     sizeof(baby.gender);//B
15     sizeof(triple);//C
16     sizeof(triple(3));//D
17     sizeof(show());//E
18 
19     getchar();
20     return 0;
21 }

答案:正确:A,D;错误:B,C,E.

(1)sizeof计算结构体是结果是结构体的所占内存空间,结构体中使用了位域定义成员,要求一个位域成员不能横跨两个字节,故可以算出该结构体的字节数为4,A正确。

(2)sizeof计算的结果是字节数,但是不允许计算结构体中某个位域成员的所占空间,当然如果不是位域定义的是可以计算的。故B错。

(3)不允许计算函数名的所占字节数大小,有点莫名其妙,C错。

(4)允许计算表达函数表达式,其结果是函数返回值的类型的字节数,即该题的int大小,D正确。

(5)函数返回值类型不确定使,不允许通过sizeof计算,故E错误。

2.2sizeof计算结构体是的内存对其问题

写出下面两个结构体的sizeof计算结果

struct s1{
    char a;//1
    short b;//4
    int c;//8
    double d;//16,16刚好是double大小的整数倍
};
struct s2 {
    char a;//1
    short b;//4
    double c;//16(从9开始排)
    int d;//20(该结果不是double的整数倍,故需要加到24)
};

数据对其总结:(1)每个成员在内存中的起始位置都必须是自身大小的整数倍。

(2)最终结构体计算结果必须是占字节数最大的成员的整数倍。

答案:16,24。

2.3结构体嵌套时的sizeof计算

 1 struct s1 {
 2     int a;
 3 };
 4 struct s2 {
 5     char a[4];
 6 };
 7 struct s3{
 8     char a[4];
 9     char b;
10 };
11 struct s4 {
12     s1 a;
13     char b;
14 };
15 struct s5{
16     s2 a;
17     char b;
18 };

含复杂结构体的数据对其总结:在数据对其时,要以结构体中最深层的基本数据类型为准。例如:如果结构体成员是一个数组,应以数组的元素的类型作为数据对其的标准,如果结构体成员是其他结构体,应以内层结构体中的基本元素类型成员作为外层结构体数据对齐的标准。故答案如下

1 sizeof(struct s1)=4;
2 sizeof(struct s2)=4;
3 sizeof(struct s3)=5;
4 sizeof(struct s4)=8;
5 sizeof(struct s5)=5;

当前文章:http://team-yao99.com/2018-11-10/87265/index.html

发布时间:2018-11-16 12:42:26

钱多多嫁人记小说下载 逆水寒赚铜币 旺财赚钱是真的吗 有什么可以在家做的工作 找羊毛网 下班兼职外卖 株洲兼职招聘工资日结 在北京偏门生意

编辑:秉开

我要说两句: (0人参与)

发布