谭浩强lj书 第六章善于使用指针和引用总结

写这个的目的就不说了吧 其实本来想说一下的 发现说了也没有什么意义 所以略了

6.1 什么是指针

在程序中定义一个变量之后 在编译时就会给这个变量分配内存单元来储存这个变量的内容 而内存单元是由字节组成的 例如int型变量的存储空间为4字节 每一个字节都有一个编号 这个编号就是地址 (程序中对变量的存取都是通过地址进行的) 这种按变量地址存取变量的方法称为直接存取方法 或直接访问的方法

还有一种对变量存取的方法就是将变量的地址存放在另一个变量中 通过这个储存着地址的变量来对这个对应地址的内容进行存取 而定义一个这种特殊的变量 即存放地址的变量就是指针变量 它所储存的地址称为指针   那么为什么把它称为指针呢  其实可以理解为 指针指向一个具体内存单元  通过它可以访问以它为地址的内存单元 一个变量的地址称为这个变量的指针  是不是很生动形象 可以自行体会下  它就是这个内存单元的地址  所以指针即地址  如果一个变量是用来存放地址的 则它称为指针变量

说实话 说的有点啰嗦了 因为总是自己总结一句 看书上写一句 不过理解了就好

总结 变量的指针就是变量的地址 用来存放变量地址的变量是指针变量

关于指针的定义与使用

此处就不写的那么详细了 写点之前不清楚的

*  符号表示指向   所以是不是就可以理解为什么 是*p 了  其实p所指向的变量                                      定义指针变量时  如 int *p=&a  这个int称为 基类型  且基类型不可省略                                               在变量名前加*表示该变量是一个指针变量  但是指针变量的变量名是不加*的

每一个指针变量都是4个字节的存储空间  用来粗放变量的地址

说来很巧  在看书的时候我在想 既然指针都是4个字节 为什么还要指定其基类型呢  在解引用时直接找到这块存储单元不就行了吗   后面也很巧  书中针对我这个疑问做出了解答  :                              因为指针是一个地址 而不是一段地址 所以必须指定这个对应变量所占的内存空间 如int为4字节 在这个地址处往后数4字节 取出来作为对应变量的存储内容  所以必须指定对应的类型  才能得到对应的存储长度 

一个变量的指针包含两方面的含义 :1. 以存储单元编号表示的地址 (如编号为2000的字节)2.它指向的存储单元的数据类型 (如int char double)等 即基类型   这样才能确定某一段存储单元

注意  

1.  不能用整数给一个指针变量赋值  因为编译系统不会把2000认为是地址(字节编号)  而认为是整数 

2.  一个指针变量只能指向同一个类型的变量

3.  对于&*  他们优先级别相同   是从右向左的方向结合  如 &*point

对于&  就不做过多解释了  & --  取地址运算符   如 int*p=&a;

关于指针变量做函数参数  一句话 :调用函数时不会改变实参指针变量的值   但可以改变实参指针变量所指向变量的值  通过指针变量做函数参数  可以做到通过函数改变主调函数中多个变量的值 相当于通过函数调用 从被调用函数中得到多个值 如果不用指针变量很难做到这一点 

关于数组与指针

没什么好说的  说个比较重点的

int main()
{
	int a[10] = { 0,1,2,3,4,5,6,7,8,9 };
	int* p = a;
	cout << *(a + 5) << endl;
	cout << *(p + 5) << endl;
	cout << a[5] << endl;
	return 0;
}

若 int *p = a;

p+i = a+i = &a[i]    

*(p+i) = *(a+i) = a[i]    

数组名就是首元素地址  p中储存的是数组名 即首元素地址  p+i  若i是2  那么就是第三个元素的地址 解引用一下 就是第三个元素 

如果指针变量p已指向数组的第一个元素 那么p+1指向同一数组中的下一个元素 他跳过了一个数组类型元素的空间 而不是把地址加一  如若是整型数组  跳过了4个字节

用指针变量作为函数形参接收数组地址

c++编译系统将形参数组名一律作为指针变量来处理    所以形参中写int* p 和 int arr[]  都是一样的    完全可以把他们都当作数组名来使用   即使是数组名  编译系统也会当作指针变量来处理  占4字节 而不是数组的总大小  

实际上在函数调用时并不存在一个占有存储空间的形参数组 只有指针变量  a[i]和*(a+i) 无条件等价

实在写不下去了  对本篇的评价: 毫无逻辑可言 想到什么写什么  。。 后面的章节会好点

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值