c语言 二维数组 c语言二维数组

作者&投稿:达奚伯 (若有异议请与网页底部的电邮联系)
二维数组可以理解为“元素是数组的数组”,或者说“一维数组的一维数组”。比如
char a[2][3],可以看成是一个一维数组,这个一维数组有2个元素,这2个元素分别是a[0]和
a[1]。其中a[0]和a[1]实际上是两个数组的首地址(即一维指针),而这两个一维数组是字符数组,也就是说它们的元素是字符。a[0]和a[1]是这两个字符数组的数组名,如果要引用其中的字符元素,要在后面用“[下标]”的形式,例如a[0][2]。

char [5][10]={"china","beijing","you","tiananmen","welcome"};
这里少了一个a,也就是数组的名称
二维数组,一般来说有三个地址:数组首地址,行首地址和元素地址

恩。。是的。a[1]他是一个数组首地址 “beijing”的首地址

该程序的作用是把四个字符串的首字母从小到大重新排列起来,puts(a[3])指输出第四个字符串,即最后结果是输出的welcome。一维数组的引用是:第一个a[0],第二个用a[1],依次类推。二维数组的引用类似。

C语言数组之二维数组



C语言编程 二维数组~

C语言数组之二维数组

这个就是指针数组和数组指针的区别了,我当年也在这里转了很久,希望我下面所说得可以帮到你。
首先,明确编译器是怎么识别*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=0;i<3;i++)
for(int
j=0;j<3;j++)
*(*(b+i)+j)
=
i*3+j;
//一个指针跑天下
cout
<<
*((*b)+1)
<<
"
"
<<
*(*(b+1))
<<
endl;
system("pause");
return
0;
}
最后我想说,其实这个做题的时候有用,自己写的时候还是尽量直接用int[n][m]的方式比较方便,稍微浪费点空间问题不大,重要的是看起来好看,不容易出错。