这个
就是指针数组和数组指针的区别了,我当年也在这里转了很久,希望我下面所说得可以帮到你。首先,明确编译器是怎么识别*s[]和(*s)[]两种形式的代码的。对于*s[],编译器会以默认的右结合的方式进行识别,所以首先识别s[],这是一个数组,然后再识别*,说明这个数组的元素都是指针。所以最后的结果就是:这是一个“以指针为元素的数组”,简称指针数组。而对于(*s)[],由于()的优先级高于*,所以编译器会先识别()里面的,也就是先识别*s,所以它是一个指针,然后()说明这个指针指向的是一个数组,所以最后的结果是:这是一个“指向数组的指针”,简称数组指针。好吧,我承认一点,就是这两个东西看起来复杂,但是其实用起来区别不大,最本质的东西就是,指针数组用到多个指针,数组指针就完全是一个指针跑天下。看下面一段代码(我偷懒用C++写的,反正这个不是重点):#includeusingnamespacestdintmain(){//指针数组*a[2]intt1[3]={0,1,2}intt2[3]={3,4,5}intt3[3]={6,7,8}int*a[3]a[0]=t1//一个指针赋值a[1]=t2//第二个指针赋值a[2]=t3//第三个指针赋值//数组指针(*b)[3]int(*b)[3]=newint[3][3]for(inti=0i<3i++)for(intj=0j<3j++)*(*(b+i)+j)=i*3+j//一个指针跑天下cout<<*((*b)+1)<<""<<*(*(b+1))<<endlsystem("pause")return0}最后我想说,其实这个做题的时候有用,自己写的时候还是尽量直接用int[n][m]的方式比较方便,稍微浪费点空间问题不大,重要的是看起来好看,不容易出错。
c语言中直接输出一个二维数组是用数组来访问输出的,例子:
#include<stdio.h>
#define M 4
#define N 3
void main()
{
int a[M][N],i,j
for(i=0i<Mi++)
for(j=0j<Nj++)
a[i][j]=3*i+j
for(i=0i<Mi++)
{ for(j=0j<Nj++)
printf("%d\t",a[i][j])//直接用数组来访问
printf("\n")
}
}
除了可以直接访问,也可以用指针来访问,用指针指向该数组,便可进行对数组的读写操作。
运行结果图:
数组的学习首先要了解数组的概念,其实质就是具有相同特征的一类事的集合!
学习数组还要控制好循环!只有循环控制得好,才能发挥数组的特征!
值得注意的东东就是数组是从0角标开始的,角标从0到n-1
例如
int a【2】中包括两个元素a【0】和a【1】,而没有a【2】
二维数组也是同样的问题
int a【2】【2】中包括四个元素,a【0】【0】,a[0][1],a[1][0],a[1][1].