定义一个二维数组a[3][3],请问a与a[0]等价吗,*(a+1)与a[1]等价吗,a+1与a[ 二维数组a[3][3]中p=a,当++p后为什么指向的是a[...

作者&投稿:尉迟卷 (若有异议请与网页底部的电邮联系)
a是二维数组的首地址,而a[0]同样是二维数组中第一行的首地址,是等价的。*(a+1)是第二行首个元素,a[1]是其地址,不等价。a[1]与a+1等价

单独一个a就是指a[0]=a,*(a+1)=a[1],a+1=a[0]+1

等价,等价,不等价

定义了二维数组a[3][4],那么a+1,*(a+1),*a[1],*(a[0]+1)各代表什么意思~

因为a是T[4]类型,所以a[1]得到的是int型的值,对其取下标是非法的。所以a[1][0]是一个非法的表达式。

咳咳以下都是废话。。怎么跑题了。。。既然打出来就懒得删了

至于&a[1][0],编译器解释为&((a[1])[0]),同样非法。

(*(p+i)+j) p+i求行下标j是列下标
*(p[i]+j) p[i]是行下标,j是列下标;
*(*(p+i)+j) *(p+i)取行下标,再加j 取列下标元素;
p+1 指向a[0][1]
p+3 指向a[1][0]

行优先,先走完第一行,后走第二行。
p+1是a[0][1]
p+3是 a[1][0]这是指针
然后 a的话就是指向第一行 a+1是指向第二行 a+2是指向第三行
意思是说
p+1=a[0][1]
p+3=a[1][0]
然后赋值的话 p=a 相当于a[0][0]
p=a+1 相当于 a[1][0]
p=a+2相当于 a[2][0]

给定一个二维数组a要求将数组的内容逆置
答://这个可以了 include<stdio.h> void input(int *a,int row,int col);void transpose(int *p,int row);void output(int *a,int row,int col);void main(){ int a[3][3];input(a[0],3,3);transpose(a[0],3);output(a[0],3,3);} void input(int *a,int row,int col){...

二维数组的定义int a【】【3】;为什么不正确?
答:int a[][3];这样写必须初始化,即要写成int a[][3]={1,2,3,4,5,6,...};或int a[][3]={{1,2,3},{4,5,6},...};,这样编译时编译器就可以算出来空的[]中应该填几了。[]中只是“允许不写”,并不是允许空着。

char a[ ][3]={{'*',' ','*'},{' ','*'},{'*',' ','*'}}; 这句话是...
答:定义char类型二维数组. 如果是 char a[N][M] ,就可以看成 N个M维数组。 后面大括号里面{}的每一个元素是一个M维数组。char a[][3] 就是 N个3维数组。 N空出来了,由后面大括号里面有多少个数组来决定N.{{'*',' ','*'},{' ','*'},{'*',' ','*'}}。 即3个3维数组。

用c++编程找到一个3*3二维数组的鞍点
答:include<iostream>using namespace std;int main(){ int a[3][3],i,j,*max[3],*min[3],m,c; cout<<"输入一个3*3的矩阵:\n"; for (i=0;i<3;i++) for (j=0;j<3;j++) cin>>a[i][j]; for (i=0;i<3;i++) { max[i]=&a[i][0]; ...

c++中如何用指针表示一二三维数组元素和元素地址值
答:0]+0)=*(*(a+0)+0) ……a[i][j]=*(*(a+i)+j)元素地址值:*(a+0)+0……*(a+i)+j;3维数组:int a[3][3][3],在外面套一个*()就是了。*(*(*(a+0)+0) +0)……a[i][j][k]=*(*(*(a+i)+j)+k)元素地址值:去掉*()就是了:*(*(a+i)+j)+k ...

a[ ]={{1,2,3},{1,2,3},{1,2,3}}可以表示2维数组吗
答:include<stdio.h>int main(){int a[3][3]={{1,2,3},{1,2,3},{1,2,3}}; //这么定义并初始化一个二维数组int i, j;for(i=0;i<3;i++)for(j=0;j<3;j++)printf("%d\n", a[i][j]);return 0;}

C语言中(a>b)?a:b和(a<b)?b:a有什么区别
答:条件运算符的表达式为“表达式1?表达式2:表达式3”,先求解表达式1,若其值为真(非0)则将表达式2的值作为整个表达式的取值,否则(表达式1的值为0)将表达式3的值作为整个表达式的取值。例如:1、max=(a>b)?a:b 就是将a和b二者中较大的一个赋给max。2、min=(a<b)?a:b 就是将a和b...

.已知有声明"int a[3][3]={0},*p1=a[1],(*p2)[3]=a;",以下表达式中与"a...
答:二维数组是一维数组的数组,其在内存中存储的时候,按行优先的顺序存储,而a[0] a[1] a[2]表示每行的元素首地址 a[1]表示a[1]所在行的地址,此时a[1]相当于一维数组,其元素也就是 a[1][0] a[1][1] a[1][2] 三个元素的一维数组。你可以将a[1]看成一维数组b,则其元素也就...

a[3][3]={1,2,5,5,4,}它是怎么排的?画个巨阵吧
答:a[1]={1,2,5} a[2]={5,4,0} a[3]={0,0,0} a[1],a[2],a[3]组成了二维数组a[3][3]祝你好运!

定义一个二维数组a[3][2],赋初值{{1,2},{4,5},{5,6}},至少用三种不同的...
答:3. 为部分数组元素初始化 static int a[2][3]={{1,2},{4}};4. 可以省略第一维的定义,但不能省略第二维的定义。系统根据初始化的数据个数和第2维的长度可以确定第一维的长度。int a[ ][3]={ 1,2,3,4,5,6};5. 若分行初始化,也可以省略第一维的定义。下列的数组定义中有两...