sizeof笔试题--转
转自http://blog.csdn.net/yanyaohua0314/archive/2007/09/17/1787749.aspx
sizeof笔试题
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.大概就这么多了吧,想到再加吧。虚函数,多重继承,空类是比较复杂的,大家大概记住知道就行了
weiloujushi补充:
class static_D
{
int static intVar;
static void fun(){}
};
sizeof(static_D) ==1 //静态数据成员不计入类内
sizeof笔试题--转的更多相关文章
- 常见sizeof 笔试题
最近面试过程中遇到了很多很多sizeof的问题. 现在总结一下: #include <stdio.h> #include <string.h> void fun(int arr ...
- C/C++ 笔试题
/////转自http://blog.csdn.net/suxinpingtao51/article/details/8015147#userconsent# 微软亚洲技术中心的面试题!!! 1.进程 ...
- 2014 WAP校园招聘笔试题
2014 WAP校园招聘笔试题 Problem's Link: http://www.doc88.com/p-6751117015483.html WAP公司笔试题 We are planning ...
- 10道C++输出易错笔试题收集
下面这些题目都是我之前准备笔试面试过程中积累的,大部分都是知名公司的笔试题,C++基础薄弱的很容易栽进去.我从中选了10道简单的题,C++初学者可以进来挑战下,C++大牛也可以作为娱乐玩下(比如下面的 ...
- 嵌入式Linux C笔试题积累(转)
http://blog.csdn.net/h_armony/article/details/6764811 1. 嵌入式系统中断服务子程序(ISR) 中断是嵌入式系统中重要的组成部分,这导致了很 ...
- C/C++笔试题(很多)
微软亚洲技术中心的面试题!!! .进程和线程的差别. 线程是指进程内的一个执行单元,也是进程内的可调度实体. 与进程的区别: (1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位 (2 ...
- 华为C语言笔试题集合
①华为笔试题搜集 1.static有什么用途?(请至少说明两种) 1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变. 2) 在模块内(但在函数体外),一个被声明为 ...
- 【转】C++笔试题汇总
原文:http://www.cnblogs.com/ifaithu/articles/2657663.html C#C++C多线程面试1.static有什么用途?(请至少说明两种)1)在函数体,一个被 ...
- 【转】c++笔试题
原文:http://blog.csdn.net/dongfengsun/article/details/1541926 ①链表反转 单向链表的反转是一个经常被问到的一个面试题,也是一个非常基础的问题. ...
随机推荐
- express组件学习
一.express 可以做:web application.api... 特性: 适合写简单的路由系统 集成很多模板引擎 中间件系统 二.请求与响应 var express = require('ex ...
- JS实现九九乘法表和时间问候语
编码 小练习,练习使用循环实现一个九九乘法表 第一步,最低要求:在Console中按行输出 n * m = t 然后,尝试在网页中,使用table来实现一个九九乘法表 <!DOCTYPE htm ...
- after() 和 remove() 实现替换
<div class="replacedDiv">this is the replaced div</div> <script> ...
- MySQL基础数据类型
一 介绍 存储引擎决定了表的类型,而表内存放的数据也要有不同的类型,每种数据类型都有自己的宽度,但宽度是可选的 详细参考: http://www.runoob.com/mysql/mysql-data ...
- layui-学习02-全局样式
CSS内置公共基础类 类名(class) 说明 布局 layui-main 用于设置一个宽度为 1140px 的水平居中块(无响应式) layui-inline 用于将标签设为内联块状元素 layui ...
- python 进程池的使用
进程同步 进程的数据是独立存在的,进程也能加锁. from multiprocessing import Process, Lock def f(l,i): l.acquire() print('he ...
- nlinfit非线性回归拟合
% % 使用指定函数对下述两变量进行曲线拟合 % % y=a+k1*exp(m*t)+k2*exp(-m*t); % % 离散点: t=[0,4,8,40], % % y=[20.09,64.5 ...
- 关于windows server 里Let's Encrypt续订的问题
引言 Let's Encrypt是什么就不详细说了,它是免费的https证书,优点就是免费,缺点就是每三个月就要自己续上.今天主要介绍的是续上有效期的环节. 1.安装certify 下载地址: htt ...
- JS调用AngularJS中的方法
案例: 在IONIC中使用百度地图的JS版SDK,在该JS相关界面中需要触发点击事件来实现在Ionic的JS中定义的函数,参考方法如下: onclick="var $scope = angu ...
- 使用nodejs代码在SAP C4C里创建Individual customer
需求:使用nodejs代码在SAP Cloud for Customer里创建Individual customer实例. 代码: var createAndBind = require('../je ...