C++指针小结(1)

自己对C++学的一知半解,对指针真是又爱又恨。。买了本c++ primer,结合书中的内容重新对指针理解理解。

1指针的组成

声明一个变量,如 int b;则有一个int类型和变量名b组成。

推广到一般的声明,定义声明的构成:基本数据类型+声明符。

指针是一个复合类型。指的是基于其他类型定义的类型。常见的有引用和指针。

声明一个指针


int*p;

解释如下:int为基本数据类型。*p是声明符。其中*是类型修饰符。p是变量名。所以很明显,在这里的指针是一个int的,其组成是int+*p。所以上述指针的正确声明形式为:


int *p//int后面应有一个空格
int *p,q;//显然*只对p有效,p是指向int类型变量的指针,q是int变量

2指针的含义和本质

指针是一个用来存放某个对象地址的对象(对象即:能储存数据并具有某种数据类型的内存空间)。即指针本身是一个对象,其作用是来储存其他对象的地址。

在这里我们可以认为对象是一个变量(变量是一种命名了的对象)。是一个储存其他变量地址的变量。这就是指针的含义。

我们常说指向变量xx的指针,也就是说指针存放了改变量的地址。

3指针初始化和传递

建议所有指针都进行初始化,避免引起错误。在可能的情况下,尽量等定义了对象之后再定义指向它的指针。

3.1如果不确定可以这么初始化:


//以下三者等价,即都生成了一个空指针

int *p=nullptr;

int *p=0;

int *p=NULL;

3.2一般的情况

//指针是一个地址,所以初始化必须是一个地址或者为空,以下是四种初始化情况
int i = 9;
int ii=99;
int *q1 = &i; //初始化1。这里的&是取地址符,而非表示引用
int *q2 = 0; //初始化2
q2 = &i;//初始化3
int *q3;  
q3 = &i;  
int *q4 = q3; //初始化4
//显然以上4个指针均指向了i,即*q1=*q2=*q3=*q4=i
//*q4 = i;//赋值语句,非初始化语句。这里的*表示解引用符,而非表示指针
//*q4=ii;//这条语句将ii的值赋给了i,以下输出(该变量以及指向改变量的指针所访问变量的值)全部为99
//常规变量赋值,后面的赋值不应该对前面的有影响
//从这里也可以窥见值传递和指针传递的区别,以及指针传递的实质和强大之处。
 std::cout <<"i:" << i << std::endl;

 std::cout << "*q1:" << *q1 << std::endl;

 std::cout << "*q2:" << *q2 << std::endl;

 std::cout << "*q3:" << *q3 << std::endl;

 std::cout << "*q4:" << *q4 << std::endl;
 

 return 0;

打印结果:
在这里插入图片描述

再来看一段代码:


int i = 9;
 int ii = 99;
 int *q1 = &i;
 int iii = i;//新增变量1
 int *q2 = 0;
 q2 = &i;
 int *q3;
 q3 = &i;
 int *q4 = q3;
 *q4 = ii;//该语句生效
 int iiii = i;//新增变量2
 std::cout << "i:" << i << std::endl;
 std::cout << "*q1:" << *q1 << std::endl;
 std::cout << "*q2:" << *q2 << std::endl;
 std::cout << "*q3:" << *q3 << std::endl;
 std::cout << "*q4:" << *q4 << std::endl;
 std::cout << "iii:" << iii << std::endl;
 std::cout << "iiii:" << iiii << std::endl;
 return 0;

打印结果:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值