二维数组、指针详解

版权声明:欢迎转载,但是亲请注明转载原文地址,谢谢,么么哒 https://blog.csdn.net/qq_33154343/article/details/83655640

二维数组、指针详解:

1.研究二维数组的表示。

首先,用代码运行进行测试,验证的相关结果,

// C.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
using namespace std;



int main()
{
	int a[3][4] = { { 1,  3,  5,  7},
	                { 9, 11, 13, 15}, 
	                {17, 19, 21, 23}
	              };


	cout <<"   a    "<< endl;
	cout << a << endl << endl;


	cout << "   a[0]           *(a+0)          *a" << endl;
	cout << a[0] << "        " << *(a+0) << "        " << *a << endl << endl;


	cout << "   &a[1]           a + 1       " << endl;
	cout << &a[1] << "        " << a + 1 << endl << endl << endl;


	cout << "   a[1]           *(a + 1)       " << endl;
	cout << a[1] << "        " << *(a + 1) << endl << endl;


	cout << "   a[1] + 2        *(a + 1) + 2       " << endl;
	cout << a[1] + 2 << "        " << *(a + 1) + 2 << endl << endl << endl;


	cout << " *(a[1] + 2)      *(*(a + 1) + 2)       " << endl;
	cout <<"   "<<    *(a[1] + 2) << "               " << *(*(a + 1) + 2) << endl << endl;





	return 0;
}

得到结果:

由此可以得出如下结果【仔细看清池一下的表格】:

虽然打印出来的结果一样,但是其含义不同,其数据类型可能不一样。且指针接收的值,不是说传递一个地址进去就可以得。还要其类型对应的上。指针之所以为派生类型,是因为其必须依靠基本数据类型才能够使用(参见本人的这篇博客数据类型、存储结构、static、extern)。

二维数组a有关的指针
  含义

地址

数据类型
a 二维数组名,指向一维数组a[0],即0行的首地址 008FFAA4 int (*)[4]
a[0],  *(a+0), *a 0行0列的地址 008FFAA4 int *
&a[1],  a+1 1行首地址  008FFAB4 int (*)[4]
a[1],  *(a+1) 1行0列元素,a[1][0]的地址  008FFAB4 int *
a[1]+2,  *(a+1)+2 1行2列元素,a[1][2]的地址 008FFABC int *
*(*a[1]+2),  *(*(a+1)+2) 1行2列元素,a[1][2]的值 13  

 

 

 

 

 

 

 

2.现在研究关于二维数组和指针的关系

怎么赋初值呢? 给一个二维数组。

正确赋值方式:

方式一:int(*p)[4] = a; 

方式二:int(*p)[4] = &a[0];


容易错误的方式

错误一:int(*p)[4] = a[0];     

  

错误二:int(*p)[4] = &(a[0][0]);

那么由此可以得出结论,重点来了,敲黑板!!!【可以参考C程序设计 p250】
a[0], a[1], a[2]的类型为 int * 类型(指向整型变量);

而a的类型为 int (*)[4],指向 含有四个元素的 一维数组。

感觉此表比较重要,重点是容易理解。再回顾一遍。[和上面的是同一个表]

猜你喜欢

转载自blog.csdn.net/qq_33154343/article/details/83655640