C++重点基础知识整理(三)--- 指针与引用

1、指针

1、指针的概念

1、直接访问

按变量名存取变量的值。cin>>i; 实际上放到定义 i的地址中。
在程序中一般是通过变量名来对内存单元进行存取操作的。其实程序经过编译以后已经将变量名转换为变量的地址,对变量值的存取都是通过地址进行的

2、间接访问

将变量的地址存放在另一个单元p中,通过 p 取出变量的地址,再针对变量操作。

3、指针

一个变量的地址形象化地称为该变量的指针
如果在程序中定义了一个变量或数组,这个变量或数组的地址(指针)也就确定为一个常量

2、变量与指针

1、变量的指针和指针变量

变量的指针就是变量的地址,当变量定义后,其指针(地址)是一常量
在这里插入图片描述

指针变量是一个变量,专门用来存放另一变量的地址(指针)。在编译时也同样分配一定字节的存储单元,未赋初值时,该存储单元内的值是随机的。
在这里插入图片描述

2、指针变量的赋值

一个指针变量只能指向同一类型的变量。整型指针变量只能放整型数据的地址,而不能放其它类型数据的地址。
“ * ” 在定义语句中表示变量的类型是指针。
“ & ”表示“取地址运算符”
在这里插入图片描述

3、指针运算符 * 的优先级

后置的++,- -比 * 的优先级高
前置的++,- - 与 * 的优先级相同,都是右结合性
int a=3, *p;
p=2000H;
p=&a;
(*p)++; 相当于a++。表达式为3, a=4
*p++ 或 * (p++) 首先 * p ,然后p=p+1,指针指向下一个int单元。表达式为3, p=2004H。
++*p=++(*p) 即 *p=p+1;a=4;
1 * p++= * (++p)首先p=p+1,然后取
p,即取p指向的下一个int单元的内容,p=2004H。

4、指针变量作为参数
  • 函数的参数可以是指针类型,它的作用是将一个变量的地址传送到另一个函数中。

  • 指针变量作为函数参数与变量本身作函数参数不同:
    变量作函数参数传递的是具体值
    指针作函数参数传递的是内存的地址。

  • 用指针变量作函数参数,在被调函数的执行过程中,如果使指针变量所指向的参数值发生变化,函数在调用结束后,其变化值也保留回主调函数。

  • 函数调用不能改变实参指针变量的值,但可以改变实参指针变量所指向变量的值。

3、数组与指针

1、定义

数组与变量一样,在内存中占据单元,有地址,一样可以用指针来表示。C++规定:
数组名就是数组的起始地址;
数组的指针就是数组的起始地址;
数组元素的指针就是数组元素的地址。
在这里插入图片描述

2、指针变量做函数参数,接收数组地址

1、数组名可以作函数的实参和形参,传递的是数组的地址。这样,实参、形参共同指向同一段内存单元,内存单元中的数据发生变化,会反应到主调函数内。
2、在函数调用时,形参数组并没有另外开辟新的存储单元,而是以实参数组的首地址作为形参数组的首地址。这样形参数组的元素值发生了变化,也就使实参数组的元素值发生了变化。
3、既然数组做形参没有开辟新的内存单元,接受的只是实参数组的首地址,这个首地址也可以在被调函数中用一个指针变量来接受,通过在被调函数中对这个指针变量的指向进行操作而使实参数组发生变化。
形参数组名是指针变量时,它并不是一个固定的地址值,它的值可以改变
在这里插入图片描述

4、字符串与指针

1、字符串的输入

istream & getline(char * buf, int bufSize);从输入流中读取bufSize-1个字符到缓冲区buf,或读到碰到‘\n’为止(哪个先到算哪个) 。
istream & getline(char * buf, int bufSize,char delim);从输入流中读取bufSize-1个字符到缓冲区buf,或读到碰到delim字符为止(哪个先到算哪个) 。
两个函数都会自动在buf中读入数据的结尾添加\0’,‘\n’ 或delim都不会被读入buf,但会被从输入流中取走。
如果输入流中‘\n’或delim之前的字符个数达到或超过了bufSize个,结果是:虽然本次读入已经完成,但是之后的读入会收到影响,导致下次读入错误字符。
可以用 if(!cin.getline(…)) 判断输入是否结束

2、字符串指针做函数参数

1、将一个字符串从一个函数传递到另一个函数,可以用地址传递的办法
2、用字符串组名作参数或用指向字符串的指针变量作参数,在被调函数中可以改变原字符串的内容

3、字符指针变量与字符数组

字符数组和字符指针变量都可以实现字符串的存储和运算,区别在于:
字符数组名是常量,定义时必须指明占用的空间大小
字符指针变量是变量,里面存储的是字符型地址,可以整体赋值,但字符串必须以‘\0’结尾。
在这里插入图片描述

5、函数与指针

可以用指针变量指向变量、字符串、数组,也可以指向一个函数。
一个存放地址的指针变量空间可以存放数据的地址(整型、字符型),也可以存放数组、字符串的地址,还可以存放函数的地址。
函数在编译时被分配给一个入口地址。这个入口地址就称为函数的地址,也是函数的指针。像数组一样,C++语言规定,函数名就代表函数的入口地址
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值