指向二维数组的指针指针这样写为什么不行

【图文】指针与二维数组_百度文库
您的浏览器Javascript被禁用,需开启后体验完整功能,
享专业文档下载特权
&赠共享文档下载特权
&100W篇文档免费专享
&每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
指针与二维数组
阅读已结束,下载本文到电脑
定制HR最喜欢的简历
你可能喜欢C语言二维数组有关指针用法_百度经验
&&&&&&&&&电脑软件C语言二维数组有关指针用法听语音1234567
百度经验:jingyan.baidu.com&&& 指针是C语言中的一个重要概念,也是C语言的一个重要特色,可以使C程序简介、紧凑、高效。每一个学习和使用C语言的人,都应当深入地学习和掌握指针。可以说,不掌握指针就是没有掌握C语言的精华,今天小编就给大家讲讲C语言指针中,最难搞清的“指针引用二维数组”。下面以二维数组a[3][3]为例:百度经验:jingyan.baidu.com1&&& 0行首地址:a,&a[0]。&&& 首先大家都知道,数组名就代表数组的首地址,所以a就是二维数组的首地址,也就是二维数组的0行首地址;&&& 同时二维数组也可以看做一个一维数组a[0]、a[1]、a[2];每个一维数组中有嵌套一个一维数组a[0]、a[1]、a[2],所以&a[0]就是0行首地址。2& & 1行首地址:a+1,&a[1];同上,理解0行首地址的应该一目了然。3& & 0行0列元素地址:&a[0][0],a[0],*(a+0),*a;& & 第一个&a[0][0]是最容易理解的,学数组的时候就是用这种方法表示的;& &
0行元素是a[0][0]、a[0][1]、a[0][2],a[0]相当于行数组的数组名,表示行数组的首地址,即0行0列地址;& & *(a+0)和*a是完全一样的,只不过为了指针的移动性质表现地更清楚;a是0行首地址,*a访问到的是0行0列地址;4& & 1行0列元素地址:&a[1][0],a[1],*(a+1);& & 只需要把上述的0行,换成一行,就可以得到;5& & 2行2列元素地址:&a[2][2],a[2]+2,*(a+2)+2;& & a[2]+3,a[2]是2行0列地址,之前忘了说一个重要概念,指针就是地址,地址就是指针;关于指针的移动,可以直接使用加减让指针移动。a[2]+2就是2行2列地址,这是下标法,如果用指针法表示就是*(a+2)+2;6& & 2行2列元素值:a[2][2],*(a[2]+2),*(*(a+2)+2);& & 对2行2列元素地址间接访问就是*(a[2]+2),*(*(a+2)+2),直接访问就是a[2][2];END百度经验:jingyan.baidu.com初学者学指针是很容易被绕晕的,其实就是一种东西取了不同名字,只要大家经常练习,熟练使用后就会发现指针原来那么容易。原创,希望大家支持。经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域),建议您详细咨询相关领域专业人士。作者声明:本篇经验系本人依照真实经历原创,未经许可,谢绝转载。投票(12)已投票(12)有得(0)我有疑问(0)◆◆说说为什么给这篇经验投票吧!我为什么投票...你还可以输入500字◆◆只有签约作者及以上等级才可发有得&你还可以输入1000字◆◆如对这篇经验有疑问,可反馈给作者,经验作者会尽力为您解决!你还可以输入500字相关经验00100热门杂志第1期你不知道的iPad技巧3837次分享第1期win7电脑那些事6677次分享第2期新人玩转百度经验1425次分享第1期Win8.1实用小技巧2670次分享第1期小白装大神1964次分享◆请扫描分享到朋友圈【图文】二维数组与指针的讲解_百度文库
您的浏览器Javascript被禁用,需开启后体验完整功能,
享专业文档下载特权
&赠共享文档下载特权
&100W篇文档免费专享
&每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
二维数组与指针的讲解
阅读已结束,下载本文到电脑
定制HR最喜欢的简历
你可能喜欢C++二维数组&指针
我的图书馆
C++二维数组&指针
//------------------------------------------不同形式的数组指针的区别 ---------------------------------C++中的指针和数据很让人头晕,尤其是二维的情形。1、int**//声明指向“一群”指向整数指针的指针。可以理解成ptr[N][N]。(N表示若干,以下同)2、int* ptr[5];//声明5个指向整数指针的指针,即ptr有5个指向"一群"整数的指针。可以理解成ptr[5][N]。3、int (* ptr)[5];//声明指向"一群"指向 5 个整数数组的指针的指针。 可以理解成ptr[N][5]。针对1,因为是指针的指针,需要两次内存分配才能使用其最终内容。首 先,ptr = ( int ** )new int *[5];这样分配好了以后,它和(2)的意义相同了;然后要分别对 5 个指针进行内存分配,例如: ptr[0] = new int[20];&针对2,上面已经说过,ptr[0] = new int[20]。针对3,这个不好理解,它的意义是"一群" 指针,每个指针都是指向一个 5 个整数的数组。如果想分配N个指针,这样写: ptr = ( int ( * )[ 5 ] ) new int[ 5*N]。这样ptr[0] 指向第 0 个 5 个整数数组的首地址,ptr[1] 指向第1个5个整数数组的首地址。//------------------------------------------二维数组的创建 ---------------------------------class A;.......A * ptr1 = new A[num]; //动态声明一维数组A **ptr2;
//动态声明二维数组ptr2 = new A*[row] //申请row个指针,每个指针属于A*,即可指向一群A,待分配==21for( int i = 0 ; i & ++i) ptr2[i] = new A[vol]; //对每个指针进行动态分配,每个指针指向vol个A对象==2//------------------------------------------二维数组的删除 ---------------------------------二维数组的删除与申请的步骤刚好相反。for( int i = 0 ; i & ++ i) delete [] ptr2[i]; //删除每行的对象,对应上面的==2delete [] ptr2; //删除row个指针,对应上面的==1
喜欢该文的人也喜欢http://zhidao.baidu.com/link?url=cItXIye6gilS80l_w0lhg0cFnpqFZkjOO0lrx201k4NiB3_c_-nv4U6blaM5_oAnHtR_Z4o32Xdcu6rtKyYDi0FHoCO0YcI8rbCOLW8h1nK
我理解你的问题是不是这样:int a[3][4];
int**p =为什么会报错是吧?
回答:你理解的是对的,但是错在,a是指向,p是指向int*,这两个不等价。
a指向一维的int数组,内存大小为sizeof(int)*数组长度;
而p只是指向一个int*类型指针,内存大小为4。指针指向的类型实际是不同的。
这里你可能又有疑惑,为啥int b[10]就可以赋值给int* pb = b呢,这是因为数组退化到指针,只有第一维的数组可以不确定数组长度,可以直接作为首地址。有“数组名能否作为右值”的讨论。
如果想实现指针赋值,可以这样int(*p)[4] =
这样定义你就可以理解,p是一个指针,指向int[4]
二维数组、指针数组、行指针、二级指针间的关联
二维数组、指针数组、二级指针、行指针互转
1. 一维数组
在讲二维数组之前,先回忆一维数组。
定义一个一维数组int a[10],其内存结构如图:
在中括号[]之前的a表示数组的...
给二维指针赋值
二维指针折腾了很久,最后发现指针不能取得的原因居然是,初始状态没有调整。切记,切记啦,以下是一个简单的代码示例。。
void Get(char **m)
char *jkj=(char...
二维数组与指针的关系
二维数组与指针的关系及二维数组的输出方法
#include &stdafx.h&
int _tmain(int argc, _TCHAR* argv[])
int a[3][4] = { 1...
C语言中二维数组和指针
C语言中二维数组和指针二维数组的地址表示方式
如数组:int a[3][3] = {1,3,5,7,9,11,13,15,17};
等价于:int a[3][3] = {{1,3,...
二维数组与双重指针
一、简介:
1、二维数组
int array[10][10];
函数声明: void fun(int a[][10])
函数调用:fun(array);
最近在看C primer plus中文第六版,看到指针与多维数组的部分,发现在10.7节中解释双重解引用时,最后有一句“地址的地址或指针的指针就是双重间接的例子”,这句话本身没有错误,但是放到多维数组...
详细讲述了&em&二维数组与指针&/em&之间的联系,对于学习C语言,理解&em&指针数组&/em&吗,&em&数组指针&/em&,数组与&em&指针&/em&之间的关系有重要的帮助。仔细学习完该文档,详细你不会再为&em&指针&/em&和数据而...
二维数组在概念上是二维的,有行和列,但在内存中所有的数组元素都是连续排列的,它们之间没有“缝隙”。以下面的二维数组 a 为例:int a[3][4] = { {0, 1, 2, 3}, {4, 5, ...
本人第一次发博客,请大家多多指教
我们都知道一维数组的我们都很熟悉:
int a[5] = { 1,2,3,4,5 };
这里p指针是int型指针,这里的赋...
二维数组在内存中存储是线性连续的,可以计算出二维数组的偏移量,进而使用一级指针遍历二维数组
使用1级指针访问二维数组
因为数组本身在地址空间中就是连续排列的,根据行数和列数,
没有更多推荐了,}

我要回帖

更多关于 二维数组是什么 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信