数组指针 int(*P)[3] --行数组指针

对于int(*p)[3]和int*p[3]一直迷糊,一直迷糊。

今天总结一下int(*p)[3]

int (*p)[3]是数组指针(其实p是一个二级指针,*p也是指针。p指向数组,*p指向数组的首元素,**p才是首元素的值),p也称为行数组指针。p指向的是一个装有3个int类型一维数组的指针。p+1指向一下一个装有3个数据的一维数组。

数组指针 int(*P)[3] --行数组指针_第1张图片p是一个行指针(二级指针),每行有3个in数据。*p是数据1的地址,*p+1是数据2的地址   *p+2是数据3的地址。

int* q;p与q是完全不同的指针了。q是指向的int类型的数据。所以赋值 p=q是错误的。

#include 
using namespace std;

void main()
{
	//例子1
	int Test[3]={1,2,3}; // 若果 int Test[4]={1,2,3,4}就错误了,因为B只能指向有3个元素的数组
	int (*B)[3];
	B=&Test;
	cout << **B <



因为是行指针(一行里有3个int类型数据)。让我想到了二维数组。

int a[4][3]  数组a有4个数据(一维数组),每个数组里有3个int型数据。

int a[4][3]={   {11,12,13}  ,  {21,22,23}   ,    {31,32,33}  ,  {41,42,43}}

                       第一个大数据    第二个大数据        第三个大数据     第四个大数据     每个数据里面有3个数据。

理解a[4] ={ {},{},{},{} }。a指向首地址,a+1指向 第二个数据成员,a+2指向第三个,a+3指向第4个。

这时候,发现a 与 int(*p)[3]中的p是一样的类型。所以可以用a给p赋值。

#include   
using namespace std;  

void main()  
{  
	int a[4][3]={   {11,12,13}  ,  {21,22,23}   ,    {31,32,33}  ,  {41,42,43}};  
	int (*p)[3];  
	p=a;  
	cout << *(*p+0) <


这里只讨论,行数组指针(其实这个指针式二级指针,因为*p还是一个指针。**p才是一维数组的第一个数据的值。

要记住啊int(*p)[3];

附图一张:数组指针 int(*P)[3] --行数组指针_第2张图片


你可能感兴趣的:(C++)