c语言二维数组

Python012

c语言二维数组,第1张

这个就是指针数组和数组指针的区别了,我当年也在这里转了很久,希望我下面所说得可以帮到你。

首先,明确编译器是怎么识别*s[]和(*s)[]两种形式的代码的。对于*s[],编译器会以默认的右结合的方式进行识别,所以首先识别s[],这是一个数组,然后再识别*,说明这个数组的元素都是指针。所以最后的结果就是:这是一个“以指针为元素的数组”,简称指针数组。而对于(*s)[],由于()的优先级高于*,所以编译器会先识别()里面的,也就是先识别*s,所以它是一个指针,然后()说明这个指针指向的是一个数组,所以最后的结果是:这是一个“指向数组的指针”,简称数组指针。

好吧,我承认一点,就是这两个东西看起来复杂,但是其实用起来区别不大,最本质的东西就是,指针数组用到多个指针,数组指针就完全是一个指针跑天下。

看下面一段代码(我偷懒用C++写的,反正这个不是重点):

#include

using

namespace

std

int

main()

{

//指针数组

*a[2]

int

t1[3]

=

{0,1,2}

int

t2[3]

=

{3,4,5}

int

t3[3]

=

{6,7,8}

int

*a[3]

a[0]

=

t1

//一个指针赋值

a[1]

=

t2

//第二个指针赋值

a[2]

=

t3

//第三个指针赋值

//数组指针

(*b)[3]

int

(*b)[3]

=

new

int[3][3]

for(int

i=0i<3i++)

for(int

j=0j<3j++)

*(*(b+i)+j)

=

i*3+j

//一个指针跑天下

cout

<<

*((*b)+1)

<<

"

"

<<

*(*(b+1))

<<

endl

system("pause")

return

0

}

最后我想说,其实这个做题的时候有用,自己写的时候还是尽量直接用int[n][m]的方式比较方便,稍微浪费点空间问题不大,重要的是看起来好看,不容易出错。

C 语言中的多维数组(multidimensional array)其实就是元素为数组的数组。n 维数组的元素是 n-1 维数组。例如,二维数组的每个元素都是一维数组,一维数组的元素当然就不是数组了。

多维数组声明时,每个维度用一对方括号来表示:char screen[10][40][80] // 一个三维数组

数组 screen 包含 10 个元素,从 screen[0] 到 screen[9]。每个元素又是一个二维数组,它有 40 个元素,这 40 个元素均是一维数组,然后每个一维数组内都有 80 个字符。整体来说,screen 数组有 32000(10×40×80)个 char 类型元素。

想要获取该三维数组 screen 内的某个 char 元素,必须指定 3 个索引值。例如,下面的语句把字符Z写入该数组的最后一个元素位置:screen[9][39][79] = 'Z'

二维数组定义的一般形式是:

dataType arrayName[length1][length2]

其中,dataType 为数据类型,arrayName 为数组名,length1 为第一维下标的长度,length2 为第二维下标的长度。

例如:

int a[3][4]

定义了一个 3 行 4 列的二维数组,共有 3×4=12 个元素,数组名为 a,即:

a[0][0], a[0][1], a[0][2], a[0][3]

a[1][0], a[1][1], a[1][2], a[1][3]

a[2][0], a[2][1], a[2][2], a[2][3]