我们都知道在C++中指针,很好用,指针可以简化C++编程任务的执行,有一个动态内存分配没有指针是完成不了的,在C++中学好指针那么你也就差不多学会一半的啦,所以非常有必要把这个指针学好的呢!我们知道变量都有一个它内存的所在的位置,这你就要用到一个符号“&”,这个叫作取址符,它表示的是内存中的一个地址,我们可以试一下:
#include <iostream>
using namespace std;
void main(){
int a;
cout<< “a的地址为:” << &a <<endl;
}
执行以上代码时会输出以下的结果:a的地址为:0133FCB4。
地址的输出形式是以16进制的方式输出来的。
指针是一个变量,它是可以用来存放对象地址的,说一下指针的定义形式:类型 标识符,如int * p 是指向整型对象的指针,可以存放一个整型变量的地址,指针里有两个符号是要知道的,一个是“&“,叫做取址符,一个是”“,叫做间址符。
PS:& 符号的意思是取地址,也就是返回一个对象在内存中的地址。
*符号的意思是取得一个指针所指向的对象。 也就是如果一个指针保存着一个内存地址,那么它就返回在那个地址的对象。
C++中有很多指针的概念,而且都很重要,我就说几个目前我接触到的几个概念。
第一个就是基础的指针:
#include <iostream>
using namespace std;
void main(){
int a=1;
int p*;
p=&a;
cout<< p <<endl;
}
这个就是最基础的指针啦,把a的地址 赋给p。
第二个就是空指针:在声明一个指针变量时,可是又没有明确的地址可以赋给它,这时就要把这个指针变量赋为NULL,也就是为空,那么这个指针就是一个空指针,就像你声明一个全局变量时不赋值,编译器会默认这个变量为0的。
#include <iostream>
using namespace std;
void main(){
int p*=NULL;
cout<< p <<endl;
}
输出的结果为:00000000,也就说明它不指向任何东西。
第三种就是指向指针的指针,也可以说为二级指针,星号是用来指定一个变量是指针,那么二级指针呢,它就用两个星号来表示就可以啦。
#include <iostream>
using namespace std;
void main(){
int a = 10;
int *p;
int **pp;
p = &a;
pp = &p;
cout << a << " " << *p << " " << **pp << endl;
}
这个输出的呢都是a的值10。
第四种是指向数组的指针,如 int *p[5],这个是指向整数的指针数组的声明,把p声明为一个数组,由5个整数指针组成。因此,p中的每个元素,都是一个指向 int 值的指针。
#include <iostream>
using namespace std;
void main(){
int a[2] = { 1,2 };
int b[2] = { 3,4 };
int c[2] = { 5,6 };
int (*p[3])[2];
p[0] = &a;
p[1] = &b;
p[2] = &c;
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 2; j++)
{
cout << *(*p[i] + j) << endl;
}
cout << endl;
}
}
这个就是将a、b、c三个数组存储在一个指针数组中,输出的结果呢就是数组a、b、c数组中的元素。