20140321 sizeof 虚函数与虚函数表 静态数组空间 动态数组空间 位字段
1、静态的数组空间char a[10];sizeof 不能用于1:函数类型 2:动态的数组空间new3:位字段
函数类型:int fun();sizeof(fun())计算的是返回类型的大小,并不是函数大小,函数要在运行时才知道其大小,而sizeof是编译时操符号
动态分配数组:sizeof()只是符号表,是编译的时候确定大小的。动态分配是运行过程中得到大小的,所以sizeof不能计算动态分配的数组大小。如:以下程序就动 态分配了数组a[N]。数组的长度N可输入确定,也可用程序中的变量确定。但要注意程序结束后要用free()将其释放,否则内存会泄漏。
#include<stdio.h>
#include<malloc.h>
void main()
{
int *a;
int N;
scanf("%d", &N);
a = (int *) malloc(N * sizeof(int));
printf("%d", sizeof(a));
free(a);
}
输出结果为:4。4实际上就是指针的大小,并不是动态分配的数组a的大小
位字段:它主要用于一些使用空间很宝贵的程序设计中,如嵌入式程序设计。
看如下位字段的定义:
typedef struct bit_field {
unsigned int a : 5;
unsigned int b : 3;
unsigned int c : 20;
unsigned int d : 4;
} bit_field_s;bit_field_s x;
x.a = 4;
x.b = 7;
x.c = 1024;
x.d = 13;
2、sizeof(string)会根据编译器的不同而不同。我的VS2010是32,面试宝典上是http://www.cnblogs.com/wanghetao/archive/2012/04/04/2431760.html
#include<iostream>
#include<string>
using namespace std; int main(int argc, char *argv[])
{
string strArr1[]={"Trend","micro","Soft"};
string *pStrArr1=new string[2];
pStrArr1[0]="US";
pStrArr1[1]="CN";
int W=sizeof(strArr1);
int L=sizeof(string);
int N=sizeof(strArr1)/sizeof(string);
int M=sizeof(pStrArr1)/sizeof(string);
for(int i=0;i<sizeof(strArr1)/sizeof(string);i++)
cout<<strArr1[i];
for(int j=0;j<sizeof(pStrArr1)/sizeof(string);j++)
cout<<pStrArr1[j];
return 0;
}
3、虚函数与虚函数表http://www.cnblogs.com/Ripper-Y/archive/2012/05/15/2501930.html
20140321 sizeof 虚函数与虚函数表 静态数组空间 动态数组空间 位字段的更多相关文章
- C++虚函数和虚函数表
前导 在上面的博文中描述了基类中存在虚函数时,基类和派生类中虚函数表的结构. 在派生类也定义了虚函数时,函数表又是怎样的结构呢? 先看下面的示例代码: #include <iostream> ...
- C++虚函数及虚函数表解析
一.背景知识(一些基本概念) 虚函数(Virtual Function):在基类中声明为 virtual 并在一个或多个派生类中被重新定义的成员函数.纯虚函数(Pure Virtual Functio ...
- c++ 虚函数多态、纯虚函数、虚函数表指针、虚基类表指针详解
静态多态.动态多态 静态多态:程序在编译阶段就可以确定调用哪个函数.这种情况叫做静态多态.比如重载,编译器根据传递给函数的参数和函数名决定具体要使用哪一个函数.动态多态:在运行期间才可以确定最终调用的 ...
- C++多态,虚函数,虚函数表,纯虚函数
1.多态性 指相同对象收到不同消息或不同对象收到相同消息时产生不同的实现动作. C++支持两种多态性:编译时多态性,运行时多态性. a.编译时多态性:通过重载函数实现 ,模板(2次编译) ...
- C++ 由虚基类 虚继承 虚函数 到 虚函数表
//虚基类:一个类可以在一个类族中既被用作虚基类,也被用作非虚基类. class Base1{ public: Base1(){cout<<"Construct Base1!&q ...
- C++之虚函数与虚继承详解
准备工作 1.VS2012使用命令行选项查看对象的内存布局 微软的Visual Studio提供给用户显示C++对象在内存中的布局的选项:/d1reportSingleClassLayout.使用方法 ...
- C++之易混淆知识点四---虚函数与虚继承
C++面向对象中,虚函数与虚继承是两个完全不同的概念. 一.虚函数 C++程序中只要类中含有虚拟函数,编译程序都会为此类生成一个对应的虚拟函数跳转表(vtbl),该虚拟函数跳转表是一个又若干个虚拟函数 ...
- 为何JAVA虚函数(虚方法)会造成父类可以"访问"子类的假象?
首先,来看一个简单的JAVA类,Base. 1 public class Base { 2 String str = "Base string"; 3 protected vo ...
- C++基础知识 基类指针、虚函数、多态性、纯虚函数、虚析构
一.基类指针.派生类指针 父类指针可以new一个子类对象 二.虚函数 有没有一个解决方法,使我们只定义一个对象指针,就可以调用父类,以及各个子类的同名函数? 有解决方案,这个对象指针必须是一个父类类型 ...
随机推荐
- (3)Redis conifg
redis.windows-service.conf Redis-x64-3.2.100 # Redis configuration file example # Note on units ...
- 【转】java使用java.lang.management监视和管理 Java 虚拟机
原文地址:https://blog.csdn.net/zhongweijian/article/details/7619383 软件包 java.lang.management 提供管理接口,用于监视 ...
- JSON 教程首页
JSON教程 JSON或JavaScript对象表示法是一个轻量级的基于文本的开放式标准,旨在为人类可读的数据交换. JSON格式最初是由Douglas Crockford规定,在RFC4627中描述 ...
- socket API CSocket CAsyncSocket 用法及区别
要进行网络编程就要和Socket打交道,Socket有同步阻塞方式和异步非阻塞方式两种使用,事实上同步和异步在我们编程的生涯中可能遇到了很多,而Socket也没什么特别.虽然同步好用,不费劲,但不能满 ...
- angularJS 绑定操作
<button type="submit" ng-disabled="editForm.$invalid || vm.isSaving" class=&q ...
- gitlab开机启动|启动 停止 重启
修改配置后的初始化 gitlab-ctl reconfigure 启动 sudo gitlab-ctl start 停止sudo gitlab-ctl stop 重启sudo gitlab-ctl r ...
- docker 详细安装及问题排查
一.安装docker 1.Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker . 通过 uname -r 命令查看 ...
- 2018-2-13-win10-UWP-动画
title author date CreateTime categories win10 UWP 动画 lindexi 2018-2-13 17:23:3 +0800 2018-2-13 17:23 ...
- vSphere ESXi如何使用嵌套虚拟化(1-vSphere 6.0+linux虚拟化)
今天准备在vSphere当中上传一个用workstation做出来的虚拟机,没想到遇到了很多问题,在这里,作为新手小白碰到了一些问题,在这里总结一下. 1.workstation做出来的虚拟机直接上传 ...
- AWS lambda DynamoDB api gateway之间的连接
创建角色 附加策略 AmazonDynamoDBFullAccess AWSLambdaDynamoDBExecutionRole 创建DynamoDB表 在表的项目中创建内容 this pipi 打 ...