一,int * int**
这种就是最简单的指针指向一个对象。
int *直接指向一个对象;int **指向一个指针
如下:
int initialInt = 10;
int *initialIntPoint = &initialInt; 一个指针对象指向对象
int **initialIntPointPoint = &initialIntPoint; 这个是双指针,指向一个指针对象
cout << "对象: " << initialInt << endl;
cout << "对象地址: " << &initialInt << endl;
cout << "指针对象: " << initialIntPoint << endl; 对象的地址
cout << "指针解引用: " << *initialIntPoint << endl; 解引用获得对象的值
cout << "双指针对象: " << *initialIntPointPoint << endl; 指针对象的地址
cout << "双指针解引用: " << *initialIntPointPoint << endl;
cout << "双指针双解引用: " << **initialIntPointPoint << endl << endl; 使用双解引用获得原本的值
二,一维数组和二维数组
int initialArray[10] = { 1, 5, 10, 15, 20 };
cout << "数组首地址: " << initialArray << endl; 就一维,所以直接就是第一个的位置
cout << "数组首地址解引用: " << *initialArray << endl;
cout << "数组首地址+1解引用: " << *(initialArray + 1) << endl << endl;int initialTwoArray[2][4] = { { 2, 5, 6, 8 }, { 22, 55, 66, 88 } };
cout << "二维数组第一行地址: " << initialTwoArray << endl; 相当于指向某一维
cout << "二维数组第一行第一个地址: " << *initialTwoArray << endl; 指向某一维的第一个的地址
cout << "二维数组第一行第一个地址解引用(第一个的值): " << **initialTwoArray << endl; 某一维的第一个的值
cout << "二维数组第一行地址第一个地址+1: " << *initialTwoArray + 1 << endl; 指向某一维的第二个地址
cout << "二维数组第一行地址第一个地址+1解引用(第二个值): " << *(*initialTwoArray + 1) << endl;
cout << "二维数组第一行地址+1(第二行): "<<initialTwoArray + 1 << endl; 指向第二维
cout << "二维数组第一行地址+1的第一个地址(第二行第一个的地址): " << *(initialTwoArray + 1) << endl; 第二维的第一个的地址
cout << "二维数组第一行地址+1的第一个地址解引用(第二行第一个的值): " << **(initialTwoArray + 1) << endl; 第二维的第一个的值
cout << "示例:第二行的第二个的值: "<<*(*(initialTwoArray + 1) + 1) << endl << endl; 第一维加一的解引用表示第二维的首地址 再加一的解引用表示第二维的第二个的值
三,int*p[]
表示是一个数组,数组里面每一个都是指针;
int *initialPointArray[10];
*initialPointArray = initialArray;
cout << "指向一个指针数组的地址: " << initialPointArray << endl;
cout << "指向一个指针数组的地址的第一个指针的地址(数组第一个对象位置): " << *initialPointArray << endl;
cout << "指向一个指针数组的地址的第一个指针的地址的解引用(数组第一个对象值): " << **initialPointArray << endl;
cout << "指向一个指针数组的地址的第二个指针的地址的解引用(数组第二个对象值): " << *(*initialPointArray + 1) << endl << endl;
四,(int*p)[]
表示每一个指针指向一个数组
int(*initialArrayPoint)[10];
initialArrayPoint = &initialArray;
cout << "指针指向一个位数为10的数组:" << endl; 表示指向一个一维数组
cout << "指针指向一个数组的指针地址: " << initialArrayPoint << endl; 代表这个数组第一个位置
cout << "指针指向一个数组的指针地址的第一个地址: " << *initialArrayPoint << endl; 这个数组第一个位置的地址
cout << "指针指向一个数组的指针地址的第一个地址的值: " << **initialArrayPoint << endl << endl; 这个数组第一个位置的值int(*initialArrayPoint2)[4];
initialArrayPoint2 = *(&initialTwoArray);
cout << "指针指向一个位数为4的二维数组:" << endl; 表示指向一个二维数组
cout << "指针指向一维数组的指针地址: " << initialArrayPoint2 << endl; 二维数组的第一维
cout << "指针指向一维数组的指针地址的第一个地址: " << *initialArrayPoint2 << endl; 二维数组第一维的第一个地址
cout << "指针指向一维数组的指针地址的第一个地址的值: " << **initialArrayPoint2 << endl; 二维数组的第一维的第一个的值
cout << "指针指向二维数组的指针地址: " << initialArrayPoint2+1 << endl; 二维数组的第二维
cout << "指针指向二维数组的指针地址的第一个地址: " << *(initialArrayPoint2+1) << endl;
cout << "指针指向二维数组的指针地址的第一个地址的值: " << **(initialArrayPoint2+1) << endl; 二维数组第二维的第一个的值
全部代码如下,可以自己实验
#include<iostream>
using namespace std;
int main()
{
int initialInt = 10;
int *initialIntPoint = &initialInt;
int **initialIntPointPoint = &initialIntPoint;
cout << "对象: " << initialInt << endl;
cout << "对象地址: " << &initialInt << endl;
cout << "指针对象: " << initialIntPoint << endl;
cout << "指针解引用: " << *initialIntPoint << endl;
cout << "双指针对象: " << initialIntPointPoint << endl;
cout << "双指针解引用: " << *initialIntPointPoint << endl;
cout << "双指针双解引用: " << **initialIntPointPoint << endl << endl;
int initialArray[10] = { 1, 5, 10, 15, 20 };
cout << "数组首地址: " << initialArray << endl;
cout << "数组首地址解引用: " << *initialArray << endl;
cout << "数组首地址+1解引用: " << *(initialArray + 1) << endl << endl;
int initialTwoArray[2][4] = { { 2, 5, 6, 8 }, { 22, 55, 66, 88 } };
cout << "二维数组第一行地址: " << initialTwoArray << endl;
cout << "二维数组第一行第一个地址: " << *initialTwoArray << endl;
cout << "二维数组第一行第一个地址解引用(第一个的值): " << **initialTwoArray << endl;
cout << "二维数组第一行地址第一个地址+1: " << *initialTwoArray + 1 << endl;
cout << "二维数组第一行地址第一个地址+1解引用(第二个值): " << *(*initialTwoArray + 1) << endl;
cout << "二维数组第一行地址+1(第二行): "<<initialTwoArray + 1 << endl;
cout << "二维数组第一行地址+1的第一个地址(第二行第一个的地址): " << *(initialTwoArray + 1) << endl;
cout << "二维数组第一行地址+1的第一个地址解引用(第二行第一个的值): " << **(initialTwoArray + 1) << endl;
cout << "示例:第二行的第二个的值: "<<*(*(initialTwoArray + 1) + 1) << endl << endl;
int *initialPointArray[10];
*initialPointArray = initialArray;
cout << "指向一个指针数组的地址: " << initialPointArray << endl;
cout << "指向一个指针数组的地址的第一个指针的地址(数组第一个对象位置): " << *initialPointArray << endl;
cout << "指向一个指针数组的地址的第一个指针的地址的解引用(数组第一个对象值): " << **initialPointArray << endl;
cout << "指向一个指针数组的地址的第二个指针的地址的解引用(数组第二个对象值): " << *(*initialPointArray + 1) << endl << endl;
int(*initialArrayPoint)[10];
initialArrayPoint = &initialArray;
cout << "指针指向一个位数为10的数组:" << endl;
cout << "指针指向一个数组的指针地址: " << initialArrayPoint << endl;
cout << "指针指向一个数组的指针地址的第一个地址: " << *initialArrayPoint << endl;
cout << "指针指向一个数组的指针地址的第一个地址的值: " << **initialArrayPoint << endl << endl;
int(*initialArrayPoint2)[4];
initialArrayPoint2 = *(&initialTwoArray);
cout << "指针指向一个位数为4的二维数组:" << endl;
cout << "指针指向一维数组的指针地址: " << initialArrayPoint2 << endl;
cout << "指针指向一维数组的指针地址的第一个地址: " << *initialArrayPoint2 << endl;
cout << "指针指向一维数组的指针地址的第一个地址的值: " << **initialArrayPoint2 << endl;
cout << "指针指向二维数组的指针地址: " << initialArrayPoint2+1 << endl;
cout << "指针指向二维数组的指针地址的第一个地址: " << *(initialArrayPoint2+1) << endl;
cout << "指针指向二维数组的指针地址的第一个地址的值: " << **(initialArrayPoint2 + 1) << endl << endl;
system("pause");
return 0;
}