sizeof笔试题

转载 2007年09月17日 09:33:00

http://www.xici.net/b700278/d44576087.htm

1.常规
char  str1[] = “Hello” ;
char  str2[5] = {'H','e','l','l','o'};
char  str3[6] = {'H','e','l','l','o','/0'};
char   *p1 = "Hello";
char  *p2[]={"hello","world"};
int     n = 10;
int    *q = &n;

sizeof (str1 ) = 6    (自动加了'/0')  
strlen (str1 ) = 5    (字符串的长度)  
sizeof (str2 ) = 5    (字符数组的大小)
strlen (str2)  = 未知 (该字符串缺少结束符'/0')
sizeof (str3)  = 6    (字符数组的大小)
strlen (str3)  = 5    (该字符串的长度为5)
sizeof ( p1 ) =  4    (p1是一个指针,大小为4)
sizeof ( p2 ) =  8    (p2是长度为2的字符串数组)
sizeof ( n ) =   4    (整型大小为4)
sizeof ( q ) =   4    (q是一个指针,大小为4)

2.动态分配内存
int *p = (int *)malloc( 100 );
sizeof ( p ) = 4      (p是一个指针,大小为4)

3.函数参数
void Function1( char p[],int num ){
    sizeof ( p ) = 4  (数组在做为函数参数时均化为指针)
}
void Function2( int p[],int num ){
    sizeof ( p ) = 4  (数组在做为函数参数时均化为指针)
}

4.多重继承
class A{};
class B{};
class C:public A,public B{};
class D:virtual public A{};
class E:virtual public A,virtual public B{};
sizeof ( A ) = 1      (空类大小为1,编译器安插一个char给空类,用来标记它的每一个对象)
sizeof ( B ) = 1      (空类大小为1,编译器安插一个char给空类,用来标记它的每一个对象)
sizeof ( C ) = 1      (继承或多重继承后空类大小还是1)
sizeof ( D ) = 4      (虚继承时编译器为该类安插一个指向父类的指针,指针大小为4
sizeof ( E ) = 8      (指向父类A的指针与父类B的指针,加起来大小为8)

5.数据对齐
类(或结构)的大小必需为类中最大数据类型的整数倍.CPU访问对齐的数据的效率是最高的,因此通常编译浪费一些空间来使得我们的数据是对齐的
class A{
public:
    int a;
};
class B{
public:
    int a ;
    char b;
};
class C{
public:
    int a ;
    char b;
    char c;
};
sizeof(A) = 4  (内含一个int ,所以大小为4)
sizeof(B) = 8   (int为4,char为1,和为5,考虑到对齐,总大小为int的整数倍即8)  
sizeof(C) = 8   (同上)

6.函数与虚函数
编译器为每个有虚函数的类都建立一个虚函数表(其大小不计算在类中),并为这个类安插一个指向虚函数表的指针,即每个有虚函数的类其大小至少为一个指针的大小4
class A{
public:
    int a;
    void Function();
};
class B{
public:
    int a;
    virtual void Function();
};
class C:public B{
public:
    char b;
};
class D:public B{
public:
    virtual void Function2();
};
class E{
public:
    static void Function();
};
sizeof (A) = 4   (内含一个int,普通函数不占大小)
sizeof (B) = 8   (一个int ,一个虚函数表指针)
sizeof (C) =12   (一个int ,一个虚函数表指针,一个char ,再加上数据对齐)
sizeof (D) = 8   (一个int ,一个虚函数表指针,多个虚函数是放在一个表里的,所以虚函数表指针只要一个就行了)
sizeof (E) = 1   (static 函数不占大小,空类大小为1)

7.父类的私有数据
虽然在子类中不可用,但是是可见的,因此私有的数据还是要占子类的大小
class A{
private:
    int a;
};
class B:public A{};
sizof(B) = 4;    (内含一个不可用的父类的int)
8.大概就这么多了吧,想到再加吧。虚函数,多重继承,空类是比较复杂的,大家大概记住知道就行了

 
举报

相关文章推荐

C/C++学习之strlen与sizeof区别、阿里巴巴笔试题实例

1.strlen是一个函数,而sizeof是一个操作符,它和解引用操作符*、取地址操作符&具有相同的优先级,具有右结合性,参见C++PRIMER第四版P147 2.strlen是计算字符串中字符的个数...

常考笔试题,详细解剖C++运算符sizeof()的使用及字节对齐问题

先看题目: [cpp] view plaincopy struct A{           char c1; &...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

sizeof的笔试题

转自:http://blog.csdn.net/yanyaohua0314/article/details/1787749 1.常规 char  str1[] = “Hello” ; char ...

sizeof 笔试题

1.常规 char  str1[] = “Hello” ; char  str2[5] = {'H','e','l','l','o'}; char  str3[6] = {'H...

sizeof那道笔试题的秘密

最近做了一套软件公司的笔试题,其中有一题要求给定数组名,求数组的元素个数,当时没有做出来,后来仔细思考和分析了一番,有了一些新的收获,分享于此~~ 【笔试题】: 请写出一个宏,计算数组的元素个...

C语言面试题——sizeof的注意点

首先sizeof在C语言里是关键字,而不是一个函数,下面的语句执行之后,i的值是保持不变的, j = sizeof(++i + ++i); 下面是C语言里部分数据类型的sizeof的值: ...

常问面试题:C++中sizeof的陷阱及应答

C++中sizeof是经常被问到的一个概念,比如,下面的几个关于sizeof的面试题反复出现在各大IT公司的技术面试当中,我们有必要完全理解并掌握。 注:在曾经面试大公司时,我的确被问到过这样的问题。...

C语言 sizeof和strlen之间的那些事 C/C++软件开发求职面试题 必备考点(一)

找工作在即,以后决定每天至少写一个知识点,主要是记录,逼迫自己动手、总结加深印象。当然如果能有一言半语让他人收益,后学幸运之至也。如有错误,还希望大家帮忙指出来。感激不尽。        后学保证每...

[面试题]sizeof与strlen的区别

例题: constchar *p = "Hello World"; char p[] = "Hello World";分别求长度和所占用空间大小,有啥区别? 答:求长度都可以用strlen(p),求占...

面试题(2)预处理、const、static、sizeof

1.#ifdef #else #endif指示符 #ifdef指示符常用来判断一个预处理常量是否已被定义,比便有条件的包含代码。#ifndef与#ifdef作用相同,只是判断方式相反。 #in...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)