早教吧作业答案频道 -->其他-->
c++求解释下面式子中*((a+1)[1])=*(*((a+1)+1))怎么来的*(a+1)[1]=*((a+1)[1])=*(*((a+1)+1))=**(a+2)=a[2][0]
题目详情
c++求解释下面式子中*((a+1)[1])=*(*((a+1)+1))怎么来的
*(a+1)[1]=*((a+1)[1])=*(*((a+1)+1))=**(a+2)=a[2][0]
*(a+1)[1]=*((a+1)[1])=*(*((a+1)+1))=**(a+2)=a[2][0]
▼优质解答
答案和解析
二维数组和指针1、二维数组和数组元素的地址若有以下定义:int *p,a[3][4];
1)二维数组a由若干个一维数组组成在C语言中定义的二维数组实际上是一个一维数组,这个一维数组的每一个成员又是一个一维数组.如以上定义的a数组,则可视a数组由a[0]、a[1]、a[2]等三个元素组成,而a[0]、a[1]、a[2]等每个元素又分别是由4个整型元素组成的一维数组.可用a[0][0]、a[0][1]等来引用a[0]中的每个元素,其它依次类推.在第二节中已解释过,C语言中,在函数体中或在函数外部定义的一维数组名是一个地址常量,其值为数组第一个元素的地址,此地址的基类型就是数组元素的类型.在以上二维数组中,a[0]、a[1]、a[2]都是一维数组名,同样也代表一个不可变的地址变量,其值依次为二维数组每行第一个元素的地址,其基类型就是数组元素的类型.因此,对于二维数组,象a[0]++这样的表达式是非法的.若有表达式a[0]+1,表达式中1的单位应当是2个字节.在以上定义中,指针变量p的基类型与a[i](0≤i<3)相同,因此,赋值语句p=a[i];是合法的.我们已知a[i]也可以写成:*(a+i),故以上赋值语句也可写成:p=*(a+i);.
2)二维数组名也是一个地址常量二维数组名同样也是一个存放地址常量的指针,其值为二维数组中第一个元素的地址.以上a数组,数组名a的值与a[0]的值相同,只是其基类型为具有4个整型元素的数组类型.即a+0的值与a[0]的值相同,a+1的值与a[1]的值相同,a+2的值与a[2]的值相同,它们分别表示a数组中第零、第一、第二行的首地址.二维数组名应理解为一个行指针.在表达式a+1中,数值1的单位应是4×2个字节,而不是2个字节.赋值语句p=a;是不合法的,因为p和a的基类型不同.同样,对于二维数组名a,也不可以进行a++,a=a+i等运算.
3)二维数组元素的地址二维数组元素的地址可以由表达式&a[i][j]求得;也可以通过每行的首地址来表示.以上二维数组a中,每个元素的地址可以通过每行的首地址:a[0]、a[1]、a[2]等来表示.如:地址&a[0][0]可以用a[0]+0来表示,地址&a[0][1]可以用a[0]+1表示;若0≤i<3、0≤j<4,则a[i][j]的地址可用以下五种表达式求得:(1)&a[i][j](2)a[i]+j(3)*(a+i)+j(4)&a[0][0]+4*i+j (5)a[0]+ 4*i+j
在以上表达式中a[i]、&a[0][0]、a[0]的基类型都是int类型,系统将自动据此来确定表达式中常量1的单位是2个字节.但是不可以把求a[i][j]地址的表达式写成:a+4*i+j,因为a的基类型是4个整型元素的数组类型,系统将自动据此来确定常量1的单位是8个字节.
2、通过地址来引用二维数组元素若有以下定义:int a[3][4],i,j;且当0≤i<3、0≤j<4,则a数组元素可用以下五种表达式来引用:(1)a[i][j](2)*(a[i]+j)(3)*(*(a+i)+j)(4)(*(a+i))[j](5)*(&a[0][0]+4*i+j)
在(2)中,表达式*(a[i]+j)中,因为a[i]的基类型为int,j的位移量为2×j字节.
在(3)中,表达式*(*(a+i)+j)中,a的基类型为4个元素的数组,i的位移量为4×2×i字节;而*(a+i)的基类型为int,j的位移量仍为2×j字节.
在(4)中,*(a+i)外的一对圆括号不可少,若写成:*(a+i)[j],因为运算符[]的优先级高于*号,表达式可转换成:*(*(a+i)+j)),即为:*(*(a+i+j)),这时i+j将使得位移量为4×2×(i+j)个字节,显示然这已不是元素a[i][j]的地址.*(*(a+i+j))等价于*(a[i+j])、等价于:a[i+j][0],引用的是数组元素a[i+j][0],而不是a[i][j],很可能早已超出数组定义的范围.
在(5)中,&a[0][0]+4*i+j代表了数组元素a[i][j]的地址,通过间址运算符*号,表达式*(&a[0][0]+4*i+j)代表了数组元素a[i][j]的存储单元.
1)二维数组a由若干个一维数组组成在C语言中定义的二维数组实际上是一个一维数组,这个一维数组的每一个成员又是一个一维数组.如以上定义的a数组,则可视a数组由a[0]、a[1]、a[2]等三个元素组成,而a[0]、a[1]、a[2]等每个元素又分别是由4个整型元素组成的一维数组.可用a[0][0]、a[0][1]等来引用a[0]中的每个元素,其它依次类推.在第二节中已解释过,C语言中,在函数体中或在函数外部定义的一维数组名是一个地址常量,其值为数组第一个元素的地址,此地址的基类型就是数组元素的类型.在以上二维数组中,a[0]、a[1]、a[2]都是一维数组名,同样也代表一个不可变的地址变量,其值依次为二维数组每行第一个元素的地址,其基类型就是数组元素的类型.因此,对于二维数组,象a[0]++这样的表达式是非法的.若有表达式a[0]+1,表达式中1的单位应当是2个字节.在以上定义中,指针变量p的基类型与a[i](0≤i<3)相同,因此,赋值语句p=a[i];是合法的.我们已知a[i]也可以写成:*(a+i),故以上赋值语句也可写成:p=*(a+i);.
2)二维数组名也是一个地址常量二维数组名同样也是一个存放地址常量的指针,其值为二维数组中第一个元素的地址.以上a数组,数组名a的值与a[0]的值相同,只是其基类型为具有4个整型元素的数组类型.即a+0的值与a[0]的值相同,a+1的值与a[1]的值相同,a+2的值与a[2]的值相同,它们分别表示a数组中第零、第一、第二行的首地址.二维数组名应理解为一个行指针.在表达式a+1中,数值1的单位应是4×2个字节,而不是2个字节.赋值语句p=a;是不合法的,因为p和a的基类型不同.同样,对于二维数组名a,也不可以进行a++,a=a+i等运算.
3)二维数组元素的地址二维数组元素的地址可以由表达式&a[i][j]求得;也可以通过每行的首地址来表示.以上二维数组a中,每个元素的地址可以通过每行的首地址:a[0]、a[1]、a[2]等来表示.如:地址&a[0][0]可以用a[0]+0来表示,地址&a[0][1]可以用a[0]+1表示;若0≤i<3、0≤j<4,则a[i][j]的地址可用以下五种表达式求得:(1)&a[i][j](2)a[i]+j(3)*(a+i)+j(4)&a[0][0]+4*i+j (5)a[0]+ 4*i+j
在以上表达式中a[i]、&a[0][0]、a[0]的基类型都是int类型,系统将自动据此来确定表达式中常量1的单位是2个字节.但是不可以把求a[i][j]地址的表达式写成:a+4*i+j,因为a的基类型是4个整型元素的数组类型,系统将自动据此来确定常量1的单位是8个字节.
2、通过地址来引用二维数组元素若有以下定义:int a[3][4],i,j;且当0≤i<3、0≤j<4,则a数组元素可用以下五种表达式来引用:(1)a[i][j](2)*(a[i]+j)(3)*(*(a+i)+j)(4)(*(a+i))[j](5)*(&a[0][0]+4*i+j)
在(2)中,表达式*(a[i]+j)中,因为a[i]的基类型为int,j的位移量为2×j字节.
在(3)中,表达式*(*(a+i)+j)中,a的基类型为4个元素的数组,i的位移量为4×2×i字节;而*(a+i)的基类型为int,j的位移量仍为2×j字节.
在(4)中,*(a+i)外的一对圆括号不可少,若写成:*(a+i)[j],因为运算符[]的优先级高于*号,表达式可转换成:*(*(a+i)+j)),即为:*(*(a+i+j)),这时i+j将使得位移量为4×2×(i+j)个字节,显示然这已不是元素a[i][j]的地址.*(*(a+i+j))等价于*(a[i+j])、等价于:a[i+j][0],引用的是数组元素a[i+j][0],而不是a[i][j],很可能早已超出数组定义的范围.
在(5)中,&a[0][0]+4*i+j代表了数组元素a[i][j]的地址,通过间址运算符*号,表达式*(&a[0][0]+4*i+j)代表了数组元素a[i][j]的存储单元.
看了 c++求解释下面式子中*((...的网友还看了以下:
音标我学了可是不是很标准,发音不打滴,可是怎么拼单词啊求求.怎么让发音标准啊还有当双元音和别的音标 2020-05-14 …
用英语说这些要求怎么讲啊,礼貌点的接触到外国人的时候,提出下面这些要求怎么讲才最礼貌.1.要求和对 2020-05-15 …
y=kx是y=inx的切线,求k.k是1/e求怎么算特别e怎么算出来的?inx=1,那么x为什么= 2020-06-12 …
平面直角坐标系中一条直线的中点怎么求就是在一个一次函数上取一条线段,求他的中点,求除了中点坐标公式 2020-06-14 …
直线的一般式方程中C怎么求?给直线经过的一点A(-6,4)斜率为-4/3求一般式方程、Ax+By+ 2020-08-01 …
求一个分数函数的对称中心在线等谢谢了F(x)=x-2/x+2对称中心怎么求?单调区间不求导怎么求? 2020-08-02 …
一元二次函数知道中点怎么求方程?记得初中学过一个公式的什么y=什么乘(什么-X)+什么我记不清楚了求 2020-12-08 …
计算基态氢原子中电子的德布罗意波长基态氢原子的能量是-13.6ev但电子的能量怎么求?怎么求电子的波 2020-12-28 …
a(1,3),b(-5,1)求线段ab垂直平分线方程我知道斜率怎么求,现在就差在,AB线段的中点这个 2021-02-03 …
在正角负角这里,β=α+k·360这个式子中,k怎么选取.比如知道一个旋转角,求与他终边重合的角,要 2021-02-04 …