指针在声明的时候最好进行初始化。初始化的方式如下:
int *pstr=NULL;
NULL是一个在c++标准库中定义为0的指针常量。内存地址中0表示的地址是不可访问的,也就是说对内存地址为0的指针变量进行取值操作时将会出错。
下面是NULL指针常量的一个例子:
#include <iostream>
using namespace std;
int main(){
int *pstr=NULL;
cout<<"pstr value is:"<<pstr<<endl;//(1)
cout<<"*pstr value is:"<<*pstr<<endl;//(2)
}
运行可以看到程序出错,注释语句(2)可以看到代码正常运行输出为:
pstr value is:0
3.取值操作和取址操作
取值操作符是*,取址操作符是&。
如果对着指针变量执行取值操作,比如*pstr,得到的将是pstr指针指向的内存地址保存的值;而对变量执行取址操作,比如&i,得到的将是变量i的地址。
下面通过一个实例来介绍两者的区别:
#include <iostream>
using namespace std;
int main(){
int i=100;
int *pstr=&i;
cout<<"the value of i is:"<<i<<endl;
cout<<"the value of pstr is:"<<pstr<<endl;
cout<<"the value of *pstr is:"<<*pstr<<endl;
cout<<"the address of i is:"<<&i<<endl;
}
可以看到类似的输出:
the value of i is:100
the value of pstr is:009AF9E4
the value of *pstr is:100
the address of i is:009AF9E4
i的值是100;pstr的值是保存i的地址;*pstr对指针变量pstr进行取值操作,得到是pstr指针变量指向的内存地址保存的值;&i表示的是对变量i进行取址操作,得到的是变量i在内存中的保存地址。
4.指针的指针
指针的指针指的是对指针变量执行取址操作,得到的是变量的指针的地址。
例子如下:
int i=10;//声明变量i
int *pstr=&i;//获取变量i的地址初始化指针变量pstr
int **pstr1=&pstr;//获取指针变量pstr的值初始化指针的指针变量pstr1
5.指针和数组
最后
针对Android程序员,我这边给大家整理了一些资料,包括不限于高级UI、性能优化、架构师课程、NDK、混合式开发(ReactNative+Weex)微信小程序、Flutter等全方面的Android进阶实践技术;希望能帮助到大家,也节省大家在网上搜索资料的时间来学习,也可以分享动态给身边好友一起学习!
-
Android前沿技术大纲
-
全套体系化高级架构视频
资料领取:点赞+点击GitHub免费获取
往期Android高级架构资料、源码、笔记、视频。高级UI、性能优化、架构师课程、混合式开发(ReactNative+Weex)全方面的Android进阶实践技术,群内还有技术大牛一起讨论交流解决问题。