对于二维数组int a[2][3]来说*a怎么也表示数组的首地址?这个怎么理解的啊?
展开全部
二维数组int a[N][M]来说, 数组的首地址 是 &(a[0][0]), 即 下标是 0行0列 的数组元素的地址。
方括号 在c/c++ 中实际上是运算符,有恒等式 x[i] = *(x+i) 。
我们可以来计算 a[i][j] 的地址 &(a[i][j]):
&(a[i][j]) = & ( * (a[i]+j) ) = & ( * ( *(a+i) + j)) = *(a+i)+j ;
把 i=0 和 j=0 代入 , 得到: &(a[0][0]) = *a; 所以: *a怎么也表示数组的首地址。
二维数组int a[N][M] 它的下标范围是 0到N-1, 0到M-1,
" 对于二维数组a[2][3],则a[2]表示是第二行的首地址" 这句话是错的。因下标超界了。
第一行的首地址 是i=0,j=0, a[i] = a[0],
第二行的首地址 是i=1,j=0, a[i] = a[1]。
从 &(a[i][j]) = & ( * (a[i]+j) ) 可以导出, &(a[1][0])= & ( *(a[1]+0)) = %(*(a[1]))=a[1];
应当说: 对于二维数组a[2][3],则a[1]表示是第二行的首地址。
方括号 在c/c++ 中实际上是运算符,有恒等式 x[i] = *(x+i) 。
我们可以来计算 a[i][j] 的地址 &(a[i][j]):
&(a[i][j]) = & ( * (a[i]+j) ) = & ( * ( *(a+i) + j)) = *(a+i)+j ;
把 i=0 和 j=0 代入 , 得到: &(a[0][0]) = *a; 所以: *a怎么也表示数组的首地址。
二维数组int a[N][M] 它的下标范围是 0到N-1, 0到M-1,
" 对于二维数组a[2][3],则a[2]表示是第二行的首地址" 这句话是错的。因下标超界了。
第一行的首地址 是i=0,j=0, a[i] = a[0],
第二行的首地址 是i=1,j=0, a[i] = a[1]。
从 &(a[i][j]) = & ( * (a[i]+j) ) 可以导出, &(a[1][0])= & ( *(a[1]+0)) = %(*(a[1]))=a[1];
应当说: 对于二维数组a[2][3],则a[1]表示是第二行的首地址。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询