C语言,二维数组和指针
inta[3][4]a[0]是第一个一维数组的数组名和首地址,地址为1000。为什么*(a+0)或*a是与a[0]等效的,它表示一维数组a[0]0号元素的首地址,也为10...
int a[3][4]
a[0]是第一个一维数组的数组名和首地址,地址为1000。
为什么 *(a+0)或*a是与a[0]等效的, 它表示一维数组a[0]0 号元素的首地址,也为1000。 *不是 指针运算,取值的吗,这里*(a+0)怎么成地址了呢? 展开
a[0]是第一个一维数组的数组名和首地址,地址为1000。
为什么 *(a+0)或*a是与a[0]等效的, 它表示一维数组a[0]0 号元素的首地址,也为1000。 *不是 指针运算,取值的吗,这里*(a+0)怎么成地址了呢? 展开
展开全部
有必要对a[i]的性质作进一步说明。a[i]从形式上看是a数组中的第i个元素。如果a是一维数组名,则a[i]代表a数组第i个元素所占的内存单元的内容。a[i]是有物理地址的,是占内存单元的。但如果a是二维数组,则a[i]是代表一维数组名。它只是一个地址(如同一维数组名只是一个指针常量一样。) a,a+i,a[i],*(a+i),*(a+i)+j,a[i]+j都是地址。 *(a[i]+j)和*(*(a+i)+j)是二维数组元素a[i][j]的值。
举例说明一下:
int a[3][4]={…………};
a,*a; 第0行首地址和0行0列元素地址
a[0],*(a+0); 第0行0列元素地址
&a[0],&a[0][0];第0行元素首地址和0行0列元素地址
a[1],a+1; 第1行0列元素地址和1行首地址
&a[1][0],*(a+1)+0; 1列0行元素地址
a[2],*(a+2);2行0列元素地址
&a[2],a+2;第2行元素首地址
a[1][0],*(*(a+1)+0);第1行0列元素的值。
举例说明一下:
int a[3][4]={…………};
a,*a; 第0行首地址和0行0列元素地址
a[0],*(a+0); 第0行0列元素地址
&a[0],&a[0][0];第0行元素首地址和0行0列元素地址
a[1],a+1; 第1行0列元素地址和1行首地址
&a[1][0],*(a+1)+0; 1列0行元素地址
a[2],*(a+2);2行0列元素地址
&a[2],a+2;第2行元素首地址
a[1][0],*(*(a+1)+0);第1行0列元素的值。
展开全部
我也说两句,你不是不明白 为什么*(a+0)怎么成地址了么?
原因就还是, 这是个二维数组, 如果是一维的话, 那么 *(a+0)肯定就是元素而不是地址了.
这东西没必要抠的太细, 你用二维数组也就是两个for语句了事, 弄的太细反倒晕了, 个人观点, 仅供参考.
原因就还是, 这是个二维数组, 如果是一维的话, 那么 *(a+0)肯定就是元素而不是地址了.
这东西没必要抠的太细, 你用二维数组也就是两个for语句了事, 弄的太细反倒晕了, 个人观点, 仅供参考.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
a为数组地址,(a+0)表示该数组的第一个变量(也是数组),*表示取值,*(a+0)得到第一个变量(第一个一维数组)的地址,它的地址与数组地址是相同的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
*(a+0)就是取a的值,a的值就是存的a[0][0]地址,也就是a[0],**a就是取 a[0][0]的内容
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询