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++类的大小——sizeof(class)

第一:孔磊d class CBase { }; 运行cout sizeof(CBase)=1; 为什么空的什么都没有是1呢?查资料……查啊查……OK这里了:先了解一个概念:类的实例化,所谓类的...
  • yangyangye
  • yangyangye
  • 2014年08月03日 22:06
  • 6092

C/C++介绍sizeof函数

0. 前向声明 sizeof,一个其貌不扬的家伙,引无数菜鸟竟折腰,小虾我当初也没少犯迷糊,秉着“辛苦我一个,幸福千万人”的伟大思想,我决定将其尽可能详细的总结一下。 但当我总结的时候才发...
  • lj695242104
  • lj695242104
  • 2013年11月17日 19:55
  • 4013

sizeof运算符详细总结

sizeof运算符的系统总结标签:c/c++转自 http://blog.csdn.net/w57w57w57/article/details/6626840 简介   sizeof是C/C++中的关...
  • hust_sheng
  • hust_sheng
  • 2016年01月18日 16:36
  • 2374

sizeof对字符数组字符串使用

#include using namespace std; void main() { char a[]={'a','b','c'}; //不是以字符串形式初始化,因此没有添加/0标志...
  • u010630958
  • u010630958
  • 2014年07月17日 09:02
  • 663

sizeof及常见考题

sizeof是C/C++中的关键字,它是一个运算符,其作用是取得一个对象(数据类型或者数据对象)的长度(即占用内存的大小,以byte为单位)。 在C++中,变量和自定义类型可以不用加(),内置类型要...
  • myself00
  • myself00
  • 2014年10月27日 21:06
  • 611

sizeof(string)的问题(很经典)

今天看到一个代码,刚开始没有看明白,代码如下: #include #include using namespace std; void main() { string a="www.ok2002.co...
  • u014082714
  • u014082714
  • 2015年04月28日 12:57
  • 3283

sizeof浅析(三)——求类的大小

sizeof求类的大小和求结构体的大小,有一定的相似性,但又不完全相同,因为类存在这继承和派生、存在着虚函数。 1、空类大小 对于一个空类,使用sizeof求得其大小为1。 2、简单类 如下定义一个类...
  • szchtx
  • szchtx
  • 2013年08月24日 11:22
  • 5711

浅析C++中sizeof操作符的用法

1. 概要 sizeof是C/C++中的一个操作符(operator),作用就是返回一个对象或者类型所占的内存字节数。返回值类型为size_t,在头文件stddef.h中定义.这是一个依赖于编译系统...
  • wangshubo1989
  • wangshubo1989
  • 2015年08月31日 11:27
  • 1948

C语言:内存地址分析 & sizeof和strlen用法总结

还是在大学时代接触的C语言,当时学习数组、指针等概念时,怎一个“晕”字了得。最近在学习之余,疯狂地恶补了相关知识,故总结之,如有错误,请大家多多指点。 一、 内存地址分析 1) 先来看一个最基础的...
  • sinat_27706697
  • sinat_27706697
  • 2015年08月19日 22:42
  • 2276

sizeof(int)*p 表示什么意思?

sizeof(int)*p 表示什么意思?
  • weibo1230123
  • weibo1230123
  • 2017年07月12日 09:54
  • 819
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:sizeof笔试题
举报原因:
原因补充:

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