若有定义:int a[2][3];则对a数组的第i行第j列元素值得正确引用为

153、 若有定义:int a[2][3];则对a数组的第i行第j列元素值得正确引用为( )
A、*(*(a+i)+j) B、(a+i)[j] C、*(a+i+j) D、*(a+i)+j

*(*(a+i)+j) 。

a是二维数组名,也是二维数组0行的首地址。a[0]是第一个一维数组的数组名和首地址*(a+0)或*a是与a[0]等效的,它表示一维数组a[0]0号元素的首地址。&a[0][0]是二维数组a的0行0列元素首地址。

同理,a+1是二维数组1行的首地址,由此可得出:a+i,a[i],*(a+i),&a[i][0]是等同的。此外,&a[i]和a[i]也是等同的。

另外,a[0]也可以看成是a[0]+0是一维数组a[0]的0号元素的首地址,而a[0]+1则是a[0]的1号元素首地址,由此可得出a[i]+j则是一维数组a[i]的j号元素首地址,它等于&a[i][j]。

由a[i]=*(a+i)得a[i]+j=*(a+i)+j,由于*(a+i)+j是二维数组a的i行j列元素的首地址。因此,该元素的值等于*(*(a+i)+j)。

扩展资料:

两个地方要注意: 

1、在程序声明变量的时候的*,只是表明“它是一个无符号整数,这个整数指向某个内存地址,一次访问sizeof(type)长度”。这点不要和(*)操作符混淆;

在C++程序声明变量的时候的&,只是表明“它是一个引用,这个引用声明时不开辟新空间,它在内存分配表加入新的一行,该行内存地址等于和调用时传入的对应参数内存地址”。

这点不要和(*)声明符,(&)操作符混淆。

参考资料:

百度百科-数组指针

百度百科-指针

温馨提示:内容为网友见解,仅供参考
第1个回答  2020-05-20

*(*(a+i)+j) 。

A是二维数组的名称和二维数组第0行的第一个地址。A[0]是第一个一维数组的数组名和第一个地址*(A+0)或*A相当于A[0],它表示一维数组元素A[0]的第一个地址。&[0][0]是2D数组A的0行0列元素的第一个地址。

同样,a+1是二维数组第1行的第一个地址,由此可以得出a+I,a[I],*(a+I),&a[I][0]是等价的。此外,a[i]和a[i]是相同的。

另外,a〔0〕也可以看作是a〔0〕+0是一维数组a〔0〕的元素0的第一个地址,而a〔0〕+1是a〔0〕的元素1的第一个地址,因此可以得出结论,a〔i〕+J是一维数组a〔i〕的元素J的第一个地址,等于&a〔i〕〔J〕。

从a[i]=*(a+i),我们得到a[i]+J=*(a+i)+J,因为*(a+i)+J是二维数组a的行i和列J元素的第一个地址,因此该元素的值等于*(*(a+i)+J)。

扩展资料:

应注意两点:

一。当一个程序声明一个变量*时,它仅仅意味着“它是一个无符号整数,指向一个内存地址,sizeof(type)的长度一次被访问”。不要将此与(*)运算符混淆;

当一个C++程序声明一个变量时,&,它只是表示“它是一个引用,不会打开新的空间。它在内存分配表中添加一个新行,该行的内存地址等于调用时传入的相应参数的内存地址。

不要将此与(*)声明符,(&)运算符混淆。

参考资料来源:

百度百科-数组指针

百度百科-指针

本回答被网友采纳
第2个回答  2020-05-20

1、定义数组和定义矩阵的程序格式完全一样,在软件中二者意思等价。通过“[]”自定义数组,同一行元素用“,”或者“空格”分隔,不同行用“;”

2、矩阵生成命令,“[]”表示空元素,“zeros(n,m)”生成n行m列0矩阵,“ones(n,m)”生成n行m列全1矩阵。具体例子如下图所示。

3、数组(或矩阵)元素的引用,引用格式为“数组名(n,m)”,如定义“A=[1 2 3;4 5 6]”这一两行三列矩阵A,令b=A(2,3),表示b等于A矩阵第二行第三列矩阵的值,仿真结果如下。

4、用“B=cell(2,3)”生成空的2行3列结构体,接着通过“B{n,m}=?”命令为结构体元素赋值,如输入“B{1,1}='asgsag' ”及“B{2,3}='A' ”命令,结果如下,这样就定义了结构体元素。

5、最后引用相应结构体元素可以用“变量名=结构体名{m,n}”,输入“b=B{2,3}”命令可得到下图结果。

本回答被网友采纳
第3个回答  推荐于2017-12-16
对于二维数组的指针只需记得两个模版:
s+i,s[i],序号为i行的首地址;*(s+i)+k,*(s[i])+k元素s[i][k]的地址
下面来看选项:A。*(a+i)+j表示元素a[i][j]的地址,加上指针运算后可得a[i][j]的值,符合题意,正确。
B。没有这种写法
C。套用模板二,表示元素a[i+j][0]的地址
D。表示元素a[i][j]的地址本回答被网友采纳
第4个回答  2015-06-15
选择第一个

若有定义:int a[2][3];则对a数组的第i行第j列元素值得正确引用为
由a[i]=*(a+i)得a[i]+j=*(a+i)+j,由于*(a+i)+j是二维数组a的i行j列元素的首地址。因此,该元素的值等于*(*(a+i)+j)。

...int a[2][3];”,则对a数组的第i行第j列元素的正确引用为...
【答案】:A A。【解析】通过地址来引用数组元素的方法有下列5种:①a[i][j];②*(a[i]+J);③*(*(a+i)+j);④*(aEiJEj]);⑤(&a[o]EoJ+3*i十j)。故A正确。

若有定义: int a[2][3];则对a数组的第i行第j列(假设i,j已正确说明并赋 ...
答案为A项。元素值的正确引用为*(*(a+i)+j)。这个题目主要是考查二维数组元素的引用方法。选项A中a+i指向数组a的第i+1行,*(a+i)则是第i+1行第0列的地址值,*(a+i)+j指向了数组a第i+1行,j+1列,*(*(a+i)+j)取到的是数组a的a[i][j]元素。所以正确答案为A项。

若有定义:int a[2][3]; 则对a数组的第i行第j列元素值的正确引用为:
(a+i) 就是a[i]的意思+j 就是a[i][j] 外面再加个*好就是取a[i][j] 的值

c语言选择题 我做了就是想对答案
则对a数组元素的正确引用是___D___. int a[5],*p=a; a)*&a[5] b)a+2 c)*(p+5) d)*(a+2)2.若有定义:int a[2][3],则对a数组的第i行j列元素地址的正确引用为___A___. a)*(a[i]+j) b)(a+i) c)*(a+j) d)a[i]+j3.若有以下定义,则p+...

若有定义“inta[2][3]=1,23+456}};”,试编程将数组a的行和列的元素互...
由于数组 b 的行数和列数与数组 a 的行数和列数相反,因此在行列互换后,数组 b 的第二行只有两个元素,第三个元素被初始化为 0。如果需要避免这种情况,需要定义一个与数组 a 行数和列数相反的数组,或者在定义数组 b 时指定初始化值。

若有定义“int a[2][3]]={{1,2,3},{4,5,6}};”,试编程将数组a的行和...
int main(int argc,char *argv[]){ int a[2][3]={{1,2,3},{4,5,6}},b[3][2],i,j;for(i=0;i<2;i++)for(j=0;j<3;j++)b[j][i]=a[i][j];for(i=0;i<3;i++){\/\/打出来看看 for(j=0;j<2;printf("%d ",b[i][j++]));putchar('\\n');} return 0;}...

若有说明int a[3][4] 则对a数组元素的正确引用为
二维数组引用基本格式:数组名[行标][列标]。行标和列标都是从0开始,最大下标为行(列)标长度-1。比如:a[0][1],表示第一行第二列的数组元素。二维数组:由行和列组成的二维表格形式的元素,其实也就是矩阵。基本格式:数据类型 数组名[行长度][列长度];行长度为二维数组行的个数,必须为...

若有说明:int a[2][3]={{11,23,57},{42,16,37}},现将a的行与列的元素...
include <stdio.h>int main(){int i,j;int a[2][3]={{11,23,57},{42,16,37}} ;int b[3][2];for( i=0;i<2;i++)for(j=0;j<3;j++)b[j][i]=a[i][j];for( i=0;i<3;i++){for(j=0;j<2;j++)printf("%d ", b[i][j] );printf("\\n");}return 0;} ...

在C语言中,写出二维数组元素a[2][3]在内存中的存放顺序
在这个示例中,我们定义了一个 2 行 3 列的二维数组 `a`。对于每个元素,它的值都存储在内存中的一个特定地址上。可以看到,第一行的元素 `a[0][0]`、`a[0][1]` 和 `a[0][2]` 存储在连续的内存位置中,接着是第二行的元素 `a[1][0]`、`a[1][1]` 和 `a[1][2]`。对于...

相似回答