C++|算数类型;引用;指针;

19 篇文章 1 订阅

1.可寻址的最小内存块称为“字节(byte)”

2. 存储的基本单元称为“字(word)”

1byte = 8 bits;

4byte = 32 bits = 1 word;

算数类型:

  • 算数类型分为两类: 整型(integral type 包括字符和布尔类型在内)和 浮点型;
  • 带符号类型和无符号类型:signed, unsigned;带符号类型可表示正数,负数,0。
    无符号类型则仅能 表示大于等于0 的值;

如何选择类型:

  • 当明确知晓数值不可能为负时,选用无符号类型;
  • 使用int执行整数运算;
  • 在算术表达式中不要使用bool或char;
  • 执行浮点数运算选用double;

当我们给无符号类型(unsigned)一个超出它表示范围的值时。结果是初始值对无符号类型表示数值总数取模后的余数;

当我们给带符号类型(signed)一个超出它表示范围的值时,结果是未定义的;

初始化 不等于 赋值!!!

———————————————————————————————————————————

2.3复合类型

引用和指针

2.3.1reference引用

引用即别名,引用的初始值必须是对象

int &refVal4 = 10; //错误: 引用类型的初始值必须是一个对象

2.3.2pointer指针

指针是指向另外一种类型的复合类型,实现了对其他对象的间接访问。指针本身就是对象,允许对指针赋值和拷贝,可以先后指向不同的对象。指针无须在定义时赋初值。

和其他内置类型一样,在块作用域内定义的指针如果没有被初始化,也将拥有一个不确定的值。

double dp, *dp2; //dp2 是指向double型对象的指针,dp是double型对象

获取对象的地址

指针存放某个对象的地址。想要获取该地址,需要使用取地址符&

int ival = 42;
int *p = &ival; //p存放变量ival的地址,或者说p是指向变量ival的指针

*引用不是对象,没有实际地址,所以不能定义指向引用的指针。 

double dval;
double *pd = &dval;        //初始值是double型对象的地址
double *pd2 = pd;          //初始值是指向double对象的指针
//指针pd指向变量dval,其本身存储的值是dval的地址,所以用pd去初始化指针pd2,就是用dval的地址去初始化pd2,所以pd2指向的也是dval,而pd2本身的值,也是val的地址

指针值

指针的值(也就是地址)应属于下列4种状态之一

  1. 指向一个对象;
  2. 指向紧邻对象所占空间的下一个位置;
  3. 空指针,意味着指着没有指向任何对象;
  4. 无效指针,也就是上述情况之外的其他值;

利用指针访问对象

如果指针指向了一个对象,则允许使用解引用符(操作符*)来访问该对象

int ival = 42'
int *p = &ival;     //p存放着变量ival的地址,或者说p是指向变量ival的指针
cout << *p;    //由符号*得到指针p所指的对象,输出42

*p = 0    //由符号*得到指针P所指的对象,即可经由p为变量ival赋值
cout << *p; //输出0

空指针

不指向任何对象

int* p1 = nullptr;
int* p2 = 0;

!初始化所有指针!

赋值和指针

给指针赋值就是令它存放一个新的地址,从而指向一个新的对象;

指针声明符:*

解引用符:* 读地址里面的信息           

取地址符:& 地址

int i = 42;
int *pi = 0;    //pi被初始化,但没有指向任何对象
int *pi2 = &i;    //pi2被初始化,存有i 的地址
int *pi3;    //如果pi3定义于块内,则pi3的值是无法确定的

pi3 = pi2;    //pi3和pi2指向同一对象
pi2 = 0;    //现在pi2不指向任何对象了

void* 指针

可以用于存放任意对象的地址。

我们对该地址中到底是个什么类型的对象并不了解。

以void*的视角来看内存空间也就仅仅是内存空间,没办法访问内存空间中所存的对象

//错误示例:
int i = 0;
int *ip = i; // 不能直接把int变量赋给int指针,正确的做法是
//通过取地址运算&i得到变量i的内存中的地址,然后再将该地址赋给指针。
 
int *p = &i;  //正确方式

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值