指针和引用以及迭代器入门

一.关于指针

指针一直被C/C++学习者认为是一个最难的点之一.指针本身其实是一种变量类型,它的值是一个内存地址,而这个地址的内存单元存储着数据.32位机器上通常指针大小为4.也许有人会问既然都是内存地址,为什么要区分指针的类型呢,比如int指针和double类型指针有何区别?这个问题的答案是因为给定内存地址,系统需要根据类型来解释内存内容,int型占用4个字节,系统根据指针提供的首地址,获取连续的4个字节的内容,如果是double型,则会获取连续的8个字节的内容.所以实际上指针存储的只是首地址.

1.指针变量的定义以及初始化

?
001
002
int *pint ; //指向一个int整数
double *pdou;


当然,你也可以在定义的时候同时初始化变量

?
001
002
003
004
int parag = 100;
int *pint = &parag;
char str[100];
char *pstr = str;

这里千万不要当成复制语句了,因为有些人无法理解这里的解引用操作*的作用只是定义变量.

2.引用和指针的区别

引用其实只是变量的一个别名,所以必须初始化,而且引用关系一旦绑定,就不能改变引用到另外一个变量,之后使用引用或者原名的操作是等效的,因为二者实际上就指的是一个东西.
看下下面的程序或者你就明白了:

?
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
#include<iostream>
using std::cout;
using std::endl;
int main()
{
int a = 0;
int b = ;
int &refA = a;
int *pA = &a;
//--------------------
//the outcome is: 100 100 100
cout<< "a:" <<a<< " refA:" <<refA<< " *pA:" <<*pA<<endl;
refA = ;
//the outcome is : 80 80 80
cout<< "a:" <<a<< " refA:" <<refA<< " *pA:" <<*pA<<endl;
*pA = ;
//the outcome is : 81 81 81
cout<< "a:" <<a<< " refA:" <<refA<< " *pA:" <<*pA<<endl;
pA = &b;
//the outcome is : 81 81 99
cout<< "a:" <<a<< " refA:" <<refA<< " *pA:" <<*pA<<endl;
return 0;
}

3.迭代器

迭代器其实是标准库中只能用于容器元素访问的一种结构.

4.const指针和指向const对象的指针

const 指针定义方式如下:

?
001
* const ptr = &a;

const指针指的是指针变量本身是const,不能修改,比如你无法在初始化后再prt = &b,但是你可以*ptr = b.所以你必须在定义时候初始化,否则该指针就成了无法赋值的空指针了.

指向const对象的指针定义方式如下:

?
001
const int *ptr = &a;

它指的是这个指针变量指向的对象是一个const类型的,你可以初始化后再进行ptr = &b,但是你不能*ptr = b.由于该指针是可以赋值的,所以,你并不一定要初始化指向const对象的指针.

1. const对象地址只能赋值给指向const对象的指针
2. 非const对象地址可以赋值给const对象,但是不能通过该指针来修改对象
3. 可以理解为“自以为指向const对象的指针”

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值