引用和指针sizeof的区别```cpp#include<iostream>using namespace std;int main(){ char b = 30; char *p = &b; char &ra = b; cout<<sizeof(p)<<endl; cout<<sizeof(ra)<<endl; system("pause"); return 0;}结果:41请按任意键继续。
1、
指针
和
引用
的本质(是什么)
(1)
指针
是存放内存地址的一种变量,特殊的地方就在它存放的是内存地址。因此,
指针
的大小不会像其他变量一样变化,只跟当前平台相关——不同平台内存地址的范围是不一样的,32位平台下,内存最大为4GB,因此只需要32bit就可以存下,所以
sizeof
(pointer)的大小是4字节。64位平台下,32位就不够用了,要想内存地址能够都一一表示,就需要64bit(但是目前应该没有这么大的内存吧?),因此
sizeof
(pointer)是8。
(2)
引用
的本质是“变量的别名”,就是给变量又重新起了一个名字,既然是“别名”,那么就一定要有本体。
2、声明和初始化时的
区别
common::ObArenaAllocator alloc;
common::ObArenaAllocator &a = alloc;
common::ObArenaAllocator *p = &alloc;
这三个变量的
sizeof
分别为:output alloc =112, refference=112, point=8
sizeof
= 112;
sizeo
好记性不如烂笔头,之前从事C的工作,在写服务器与数据库相关的东西。换了份工作后,用C++ 做偏上层的东西,发现之前学到的C和数据库知识已经很模糊了。因此我想把这些知识点都记下。温故而知新。都是一些零碎的东西,有的是不经常用容易忘的,有的是不理解容易忘的,这里慢慢积累。
Linux 命令相关:
tar命令
-c 建立新的包
-v 显示执行过程
sizeof
的用法:
sizeof
是一种取运算对象(包括:类型名字,表达式)字节数(又可以说是所占内存大小)的操作符。
注:1,
sizeof
取的是类型所占内存而非元素的个数;强调这个是因为还有一种函数:strlen()计算字符串元素的个数。
2,
sizeof
常用在以下这些类型中:
sizeof
char :值为1;
sizeof
引用
:值为被
引用
原因:类要创建对象,要预留空间;最小的内存单位为 1;
(类的实例化就是在内存中分配一块地址,每个实例在内存中都有独一无二的地址)
2、类 跟 struct一样 需要考虑对齐和补齐的问题
3、类中含有 static 成员
sizeof
不计其大小
原因:因为static成员是分配在全局区为类的所有对象共享
4、带virtua
转自:https://www.cnblogs.com/chengxin1982/archive/2009/01/13/1374575.html
sizeof
()功能:计算数据空间的字节数
1.与strlen()比较
strlen()计算字符数组的字符数,以"\0"为结束判断,不计算为’\0’的数组元素。
而
sizeof
计算数据(包括数组、变量、类型、结构体等)所占内存空间,用字节数表示。
2.
指针
...
sizeof
运算符返回一条表达式或一个类型名字所占用的字节数。
sizeof
运算符满足右结合律,其所得的值是一个 size_t 类型的常量表达式。运算符的运算对象有两种形式:
sizeof
(type)
sizeof
expr在第二种形式中,
sizeof
返回的是表达式结果类型的大小。与众不同的一点是,
sizeof
并不实际计算其运算对象的
sizeof
和strlen在C语言中有以下
区别
:
1.是一个运算符,用于计算变量或类型所占用的内存空间大小,而strlen是一个库函数,用于计算字符串中实际字符的数量。
2.
sizeof
在编译时计算,返回的是指定类型或变量所占用的字节数,而strlen在运行时计算,返回的是字符串的实际长度。
3.
sizeof
的参数可以是数组、
指针
、对象、函数等不同类型,而strlen的参数必须是字符型
指针
(传入数组时自动退化为
指针
)。
4. 对于不同的参数类型,
sizeof
返回的值表示的含义也不同,如数组表示编译时分配的数组空间大小,
指针
表示存储该
指针
所用的空间大小,在32位机器上是4,在64位机器上是8,类型表示该类型所占的空间大小,对象表示对象的实际占用空间大小,函数表示函数的返回类型所占的空间大小(不能是void)。