C++ 指针复习
Posted Crazod
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ 指针复习相关的知识,希望对你有一定的参考价值。
最近开始准备实习的笔试,复习了一下C++ 指针的内容
在计算机的每一个字节都有一个对应的地址:
很多书上用街道上的门牌比喻:地址使用数字来表示的,就和街道上的门牌号一样。但这样是不甚贴切的,因为存在着二级指针和一个数据存在多个地址等情况。
所以我觉得用字典前面的目录来比喻比较贴切。
在我们的程序中:
先举一个简单的例子,int *p ; 这里表明我们定义了一个指针,也就是说我们在字典的目录里定义了一条目录,但是它指向的内容(值),指向多少页(存放的地址)都是不确定的。
int *pc ;//定义了一个指针 int ac; pc = &c ;//这个时候,指针就指向了a c= 5;//p指向的a 就存了值 5; cout << pc <<endl;//0034FE88 cout << &c <<endl;//0034FE88 cout << c <<endl; //5 cout << *pc <<endl;//5 cout << pc + 1 <<endl;//0034FE8C
*pc = 3;
cout << c <<endl;//3
int *pd;
*pd = 4;//error
可以看到,这时,pc存放着数据c的地址,而*pc代表着c中存放的值,改变了*pc也就意味着改变了变量c的值,值得注意的是,pc+1的值并不是代表着pc地址值+1,而是pc地址值+1*int数据所占字节的值。
但是如果一个指针,不进行初始化的话,是不能够进行赋值的,Run-Time Check Failure #3 - The variable ‘pd‘ is being used without being initialized.
#include <iostream> using namespace std; int main() { int a[]={30,21,12,43,34,75}; char b; int *p = a; for(int i = 0 ; i<5 ; i++) cout << *(p++) <<endl;//3,30,21,12,43 int *q = a; cout << q <<endl;//0030F978 cout << q+1 <<endl;//0030F97C cout << *q <<endl;//30 cout << *q+1 <<endl;//31 cout << *(q+1) <<endl;//21 cout << &a[1] <<endl;//0030F97C cout << &q <<endl;//0030F930 cin>>b; return 0 ; }
可以看出,实际上q就存放着数组a的首地址,而q+1就是a[1]元素的地址,*(q+1)就是a[1].
以上是关于C++ 指针复习的主要内容,如果未能解决你的问题,请参考以下文章
c++复习笔记——智能指针详细解析(智能指针的使用,原理分析)