版面调整调查!
返回列表 回复 发帖

求助!!~~~~

请问如何区别指针数组和数组的 指针!!!
特别是2维数组和指针!!
比如::(*)p[9]和*p[7],*p[9][8];
这些怎么区别
请讲详细点!!
我是初学者!!
谢谢!
gsfsd

我也不太懂,大家互相帮助哈

指向数组的指针和指针数组是两个不同的东东,它们定义格式有点点像,别搞混了。
指向数组的指针定义格式:

<类型说明符>(*<指针名>)[<大小>]

其中,用来说明指针的 * 要与<指针名>括在一起。后面用一个方括号表示该指针指向一维数组,后面用二个方括号表示该指针指向二维数组。<类型说明符>用来说明指针所指向的数组的元素的类型。例如:

int (*p)[9]

P是一个指向一维数组的指针,该数组有9个int型元素。

所谓指针数组指的是数组元素为指针的那类数组。该数组的一个元素可以是指向同一类型的一般指针,也可以是指向同一类类型的对象。

一般指针数组的定义格式如下:

<类型名>*<数组名>[<大小>]...

其中,*加在<数组名>前面表示该数组为指针数组。[<大小>]表示某一维的大小,即该维的元素个数,…表示可以是多维指针数组,每一个[<大小>]表示一维。例如:

int *p[7] 表示p是一个元素为指针的数组,它们指向的对象为int
int *p[9][8] 类似上面的



总结起来,通俗的说,指针数组包括很多指针,数组指针就一个指针
快拿水来把这条鱼淹死

re:楼上的兄弟谢谢你的指点,但是本人还是不懂...

楼上的兄弟谢谢你的指点,但是本人还是不懂这个问题。
例如,一个二维数组可以定义为一个指向一组连续的 一维数组的指针。
如:一个2维数组可以声明为:
---- int (*p)[9]
可以按我们传统的定义方式:---int p[][9];
而这两者是等价的 。------他就是只控制列标,而不需要给出他的行标。
请问是不是这样的!!~~
gsfsd

re:总结起来,通俗的说,指针数组包括很多指针...

总结起来,通俗的说,指针数组包括很多指针,数组指针就一个指针
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
讲得再清楚不过了。书读百遍,其义自现。
A conclusion is simply the place where someone got tired of thinking.

re:我个人认为int (*p)[9]定义了一...

我个人认为int (*p)[9]定义了一个指针,该指针指向一个一维数组,通过且只能通过该指针可以实现对该数组的访问,
指向数组的指针的主要应用思想是:将数组的首地址赋给指针,然后通过循环(for)改变指针指向的地址,从而动态的访问数组中各个元素。


注:后面用一个方括号表示该指针指向一维数组,后面用二个方括号表示该指针指向二维数组,所以我认为你说那个表示2维是错误的
一个二维数组可以定义为一个指向一组连续的 一维数组的指针,这句话我不懂它的意思,你或许说的是对象元素之类的了,那个和这个不一样
快拿水来把这条鱼淹死

re:谢谢!!

谢谢!!
gsfsd

re:指针数组就是数组的每个元素都是指针数...

指针数组就是数组的每个元素都是指针
数组就是每个元素都是常量

re:我估计数组的每个元素都是变量:)

我估计数组的每个元素都是变量:)
快拿水来把这条鱼淹死

re:int (*p)[9]; 这样定义的p是...

int (*p)[9]; 这样定义的p是指向一维数组(整个数组)的指针,同时也是二维数组的行指针,它能指向二维数组的一行(有9个元素),如果对它实行p++运算,p向下移动的是 2乘以9=18 个字节,而不是2个字节。它与定义的一个普通指针使它等于一个一维数组的首元素地址是不同的。
所以 int (*p)[9] 与int p[][9]是等价的。数组名也是指针,两者的p也都指向列数为9的二维数组。(不过只有在对二维数组赋初值的前提下才能省略行数)
。 。。 哇靠~! 。361°。。 让开~~!!! 。。361°。。。。 我给你们送乐子来了~! 。。。。361°。。。。。。

re:perfect

perfect
快拿水来把这条鱼淹死

re:报二级的钱都还一直没有郁闷!

报二级的钱都还一直没有
郁闷!

直接报三级,二级太简单了,学不了什么东西
返回列表