(1)关于sizeof()等若干问题。

求出下列sizeof的返回值。

char* float* int*  ,         都是指针型,所以为4byte。

char s[] = "0123456789", 末尾隐含”\0”,所以为11byte。

char str[100], 为100 byte。

下面的结构体a, 为6byte。

struct a
{short a1;short a2;short a3;
}

下面的结构体b, 为8byte。

struct b
{short b1;float b2;
}

结构体b的之所为8byte,不是6byte的原因是,系统采用了内存byte对齐的方式来分配内存。

byte对齐的细节要满足3个准则。

1. 结构体变量的首地址能够被结构体中最宽的成员大小能整除。

2. 每个成员相当于首地址的偏移量都是成员大小的整数倍,可以在成员之间填空字节。

3. 结构体的大小应该为最宽成员的整数倍。可在最后填加空字节。

其中补充说明:

void main()
{
int  a1;
int  b1;
int  c1;printf("0x%08x  ", &a1);
printf("0x%08x  ", &b1);
printf("0x%08x  ", &c1);
}

打印得到的内存地址为

0x001dfc90

0x001dfc8c

0x001dfc88

两个变量之间的地址差为4。 内存的地址是按字节来进行管理的。

关于空类的sizeof()

例如

class E
{};

所占用的字节为1byte. 这是编译器对空类进行实例化的结果。

class A1
{int a;static int b;
}

sizeof(A1)所占的字节数位4。因为sizeof计算的是在栈中分配内存的大小。而static的变量存在全局变量区。

(2)sizeof与strlen区别

strlen (http://www.cplusplus.com/reference/cstring/strlen/)

size_t strlen ( const char * str );

Returns the length of the C string str.

The length of a C string is determined by the terminating null-character: A C string is as long as the number of characters between the beginning of the string and the terminating null character (without including the terminating null character itself). This should not be confused with the size of the array that holds the string. For example:
char mystr[100]="test string";
defines an array of characters with a size of 100 chars, but the C string with which mystr has been initialized has a length of only 11 characters. Therefore, while sizeof(mystr) evaluates to 100, strlen(mystr) returns 11.

(3) how many bytes will be occupied for the variable ( int **a[3][4])?

3 x 4 x 4 = 48 byte.

(4) sizeof(string) 在windows 64 + vs2010上是32.

(5) sizeof(class)

1.为类中的非静态成员(static)数据的类型大小之和.

2.有编译器额外加入的成员变量的大小,用来支持语言的某些特性(如:指向虚函数的指针).

3.为了优化存取效率,进行的内存对齐.

4 与类中的构造函数,析构函数以及其他的成员函数无关.

例子:

#include <iostream>
using namespace std;
class a{};
class b{};
class c:public a{virtual void fun()=0;};
class d:public b,public c{};int main()
{cout<<"sizeof(a)"<<sizeof(a)<<endl;cout<<"sizeof(b)"<<sizeof(b)<<endl;cout<<"sizeof(c)"<<sizeof(c)<<endl;cout<<"sizeof(d)"<<sizeof(d)<<endl;return 0;
}

结果是1,1,4,8.其中空类的大小为1,占位用。c的大小为4,包含了虚函数指针。d的大小应该为5,但是结果为了8,因为内存对齐的原因。

class a{pivate: int data;
};class b{ private:int data;static int data1;
};

其中,结果为4,4。static的变量存储在全局变量区。

转载于:https://www.cnblogs.com/bruce81/archive/2013/02/19/2917673.html

程序设计基本概念(3)(sizeof)-2.20 2.23相关推荐

  1. 面向对象程序设计基本概念

    面向对象程序设计基本概念 重点: C++中的 多态 和 指针间接赋值 1): 多态的三个条件         a: 子类继承父类         b: 虚函数(虚表及虚表指针)         c: ...

  2. 【DockerCE】Docker-CE 20.10.23正式版发布

    官网地址(For RHEL/CentOS 7.9): https://download.docker.com/linux/centos/7/x86_64/stable/Packages/ 20.10. ...

  3. miui 7.7.20 android,MIUI12 20.7.23更新,第二批稳定版公测陆续推送!

    MIUI12 20.7.23更新,第二批稳定版公测陆续推送! 2020-07-23 22:17:18 0点赞 0收藏 0评论 创作立场声明:本文由我原创,转载请标注来源. 迎接我们的是这周的最后一个版 ...

  4. 吉大c 语言程序设计奥鹏作业,吉大20春学期《可编程控制器》在线作业一百分...

    吉大20春学期<可编程控制器>在线作业一百分 2020-07-04 08:07:47 896 有学员问关于吉大20春学期<可编程控制器>在线作业一百分的题目的参考答案和解析,具 ...

  5. 【程序员面试宝典】第五章 程序设计基本概念

    2013-07-28 19:40:41 面试宝典上的题目设计到而定东西很碎,很繁琐,不是针对数据结构与算法的考查,准备在两周内看完,并把一些自己美考虑到的记下来,方便日后复习. 考查点:自增运算++. ...

  6. 【ERP】ERP发展阶段有哪些?对ERP发展各个阶段概念的理解(20年3月29日第二章学习笔记)

    ERP发展历经五大阶段 1.ROP库存订货点法 2.MRP物料需求计划 3.闭环MRP 4.MRPII制造业资源计划 5.ERP企业资源计划 1.ROP库存订货点法 ROP,库存订货点法,很好理解,就 ...

  7. 奥鹏C语言程序设计考试,C语言程序设计_题库_201903_A 更新20春北理工复习题

    [试题分类]:C语言程序设计下列关于C语言中main函数位置的叙述中,正确的是 ' q% c* Y# b! Q# q5 O# N9 {A. 必须在程序的最后 0 e$ I* r% c( v. ?# ] ...

  8. 程序设计基本概念(2)-2.19

    1. C和C++区别 C是结构化语言.C++是面向对象的语言. 2. C++中如何调用C编译器编译后的函数. 要在C++中添加extern "C", 因为C++支持函数重载.编译后 ...

  9. JavaScript高级程序设计基本概念

    ECMAscript到底是什么?它和JavaScript的关系?(这个概念我也是百度的) 要讲清楚这个问题,需要回顾历史.1996年11月,JavaScript的创造者Netscape公司,决定将Ja ...

最新文章

  1. 我的随笔---高亮规范
  2. 使用JS实现文字搬运工
  3. Java多线程系列(八):ConcurrentHashMap的实现原理(JDK1.7和JDK1.8)
  4. cocos2d里面如何实现MVC(一)
  5. @AspectJ中的几种通知方式详解
  6. mysql数据没有同步更新_MySQL数据库主从没有同步的两种解决方案
  7. emacs操作方法总结
  8. Linux-Input入门-一次愉快的源码分析
  9. 小米平板2wifi驱动下载_小米平板2 win10驱动
  10. Bigemap中添加离线地图数据包 教程
  11. 判断字符串是否是邮箱或者手机号码格式
  12. 【mysql表查询】某门课程的前三名(包含并列)
  13. python ttk_tkinter进阶版——ttk
  14. 使用IMU与轮速计进行单线激光雷达的运动畸变校正
  15. 图片还原去遮挡_如何把人像照片上的遮盖物去除看到原来人像?
  16. maven在win10上的安装和配置
  17. 稀里糊涂的攻防世界之easyRE1
  18. 嗨格式数据恢复的 10 种最佳替代方法
  19. NameError: name 'XX' is not defined
  20. 赛迪视点 | 新冠疫情下的中国集成电路产业发展

热门文章

  1. 开源Android或将收费
  2. 透过国外初创公司看高精度地图难题
  3. C/C++语言参数传递----函数/方法 参数的指针引用传递
  4. 非交互模式修改Ubuntu密码的命令
  5. SQL SERVER 2008过了评估期
  6. T-SQL查询进阶--详解公用表表达式(CTE)
  7. 美国大学录取时如何考察学生的背景
  8. 区块链公司Coingeek支持一系列BCH协议变更
  9. .NET Core微服务之路:不断更新中的目录 (v0.42)
  10. 用vue-scroller做上拉刷新,下拉加载的模板(简单明了,通用)