C++关于理解数组指针
书上说*(a[0]+1表示a[0][1]元素的值,而a[0]和*(a+0)等价,因此也可以用*(*(a+0)+1)表示a[0][1]。这里是怎么理解的,我的理解:a[0]...
书上说*(a[0]+1表示a[0][1]元素的值,而a[0]和*(a+0)等价,因此也可以用*(*(a+0)+1)表示a[0][1]。这里是怎么理解的,我的理解:a[0]表示a[0][0]的地址,*(a+0)表示地址里面的值,地址怎么会等于地址里面的值呢
展开
4个回答
展开全部
楼主的理解有些混乱呀。
*的作用有以下几个:
定义指针,例如 int *a;表示定义了一个int型的指针,a表示指针的地址(其实*a就是一个整形数值)
取地址的值,例如 a=*b,其中b为一个地址。
简单的应用就这两个。
你所说的东西我给你解释一下:a[][],这是一个2维数组,这样a[0]表示第一行的首地址,a[1]就表示第2行的首地址。a[0]+1就表示第一行的首地址下面的一个地址,就是a[0][1]的地址。
任何一个数组,不管是几维的,a就表示整个数组的首地址,也就是你例子中的a[0][0]的地址。就如我上面所说的啊a[0]就是表示a[0][0]的地址。
你说的a[0]和*(a+0)等价,是针对1维数组而言的。
*(*(a+0)+1)表示a[0][1]这句是错的。*(a+0)+1表示a[0][0]+1是个数值,数值前面是不能加*的。楼主说的是对的。
*的作用有以下几个:
定义指针,例如 int *a;表示定义了一个int型的指针,a表示指针的地址(其实*a就是一个整形数值)
取地址的值,例如 a=*b,其中b为一个地址。
简单的应用就这两个。
你所说的东西我给你解释一下:a[][],这是一个2维数组,这样a[0]表示第一行的首地址,a[1]就表示第2行的首地址。a[0]+1就表示第一行的首地址下面的一个地址,就是a[0][1]的地址。
任何一个数组,不管是几维的,a就表示整个数组的首地址,也就是你例子中的a[0][0]的地址。就如我上面所说的啊a[0]就是表示a[0][0]的地址。
你说的a[0]和*(a+0)等价,是针对1维数组而言的。
*(*(a+0)+1)表示a[0][1]这句是错的。*(a+0)+1表示a[0][0]+1是个数值,数值前面是不能加*的。楼主说的是对的。
展开全部
a[0]表示的是行地址
你可以去网上查查什么是行首地址 什么是元素地址
和之间的转换
你可以去网上查查什么是行首地址 什么是元素地址
和之间的转换
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
a[0]表示a[0][0]的地址
没错。实际上,a、a[0]、&(a[0][0])的值都一样,是个地址,只是类型不同。
如果是int数组
a是int**,所以**a才等于a[0][0]
a[0]是int*,所以*(a[0])等于a[0][0]
&(a[0][0])也是int*,所以*(&a[0][0])等于a[0][0]
*(a+0)并不表示地址里的值。a的类型是int**,所以a+0的类型也是int**。所以*(a+0)是指a[0],而不是a[0][0]
没错。实际上,a、a[0]、&(a[0][0])的值都一样,是个地址,只是类型不同。
如果是int数组
a是int**,所以**a才等于a[0][0]
a[0]是int*,所以*(a[0])等于a[0][0]
&(a[0][0])也是int*,所以*(&a[0][0])等于a[0][0]
*(a+0)并不表示地址里的值。a的类型是int**,所以a+0的类型也是int**。所以*(a+0)是指a[0],而不是a[0][0]
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你好;int *a[3]就相当于int[3][];所以a[0].a[1].a[2]分别代表第一行第二行第三行的首地址,a[0]=&a[0][0];a[1]=a[1][0];a[2]=a[2][0];
那么a[1][1]=*(a[1]+1)=*(*(a+1)+1)
,
那么a[1][1]=*(a[1]+1)=*(*(a+1)+1)
,
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询