若有定义: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++程序声明变量的时候的&,只是表明“它是一个引用,这个引用声明时不开辟新空间,它在内存分配表加入新的一行,该行内存地址等于和调用时传入的对应参数内存地址”。
这点不要和(*)声明符,(&)操作符混淆。
参考资料:
*(*(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++程序声明一个变量时,&,它只是表示“它是一个引用,不会打开新的空间。它在内存分配表中添加一个新行,该行的内存地址等于调用时传入的相应参数的内存地址。
不要将此与(*)声明符,(&)运算符混淆。
参考资料来源:
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}”命令可得到下图结果。
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]的地址
广告 您可能关注的内容 |