用指向数组元素的指针访问二维数组

1)在主函数中定义一个一维数组a,元素类型为int,元素个数为100;2)在主函数中给a的所有元素赋值为下标值乘以7加10,比如a[3]=3*7+10;3)定义一个函数a... 1)在主函数中定义一个一维数组a,元素类型为int,元素个数为100;
2)在主函数中给a的所有元素赋值为下标值乘以7加10,比如a[3]=3*7+10;
3)定义一个函数arryTimesSum,
函数原型:int arryTimesSum(int *x, int times, int n);
函数功能:从x指向的单元起,将接下来的n个单元中的每个单元的值乘以 times,最后求这n个单元的和;
4)在主函数中调用函数arryTimesSum将数组a的所有元素乘以5后求和并输出;
5)在主函数中调用函数arryTimesSum将数组a的从a[6]起到a[48]的所有元素乘以5后求和并输出。
注意:第4)第5)步中的操作不要改变数组a的值,仅仅是将其元素的值乘以5后再求和。
展开
 我来答
xu3180497
2017-10-18 · TA获得超过1659个赞
知道小有建树答主
回答量:390
采纳率:66%
帮助的人:199万
展开全部
int(*p)[10]定义了一个指向二维数组的指针p,赋给它10个长度。然后把a数组的值赋给(*p)[10],注意,这里是a数组是5行10列的,放入(*p)[10]是把a[0][0],a[0][1],a[0][2],a[0][3],a[0][4],a[0][5],a[0][6],a[0][7],a[0][8],a[0][9]放入(*p)[0]中,同理,将a[1][0...9]放入(*p)[1]。最后(*p)[10]中的值只有五行被初始化为a数组的值了。
在本例中,p和p[0]是同一个意思,就是数组a的起始地址,等价于cout<<a<<endl,但是他们有区别,p指向的是整个数组的首地址,而p[0]则指向a的首行首地址(继续往下看...)。
p[9]则值内存为p数组分配的(*p)[9]的地址。如果你仔细验证程序的输出结果,你就会发现:
#include
#include "iostream"
using std::cout;
using std::endl;
using std::hex;
void main()
{
int a[5][10]={1,2};
int (*p)[10]=a;
cout<<p<<endl;
cout<<p[0]<<endl;
cout<<p[9]<<endl;
}
输出结果为(不同机器结果不同):
0012FEB8
0012FEB8
00130020
如果你验证它们这些地址存储的值,你会发现:
#include
#include "iostream"
using std::cout;
using std::endl;
using std::hex;
void main()
{
int a[5][10]={1,2};
int (*p)[10]=a;
cout<<*p<<endl;
cout<<(*p)[0]<<endl;
cout<<(*p)[9]<<endl;
}
输出结果为:
0012FEB8
1
0
这是p和p[0]的区别就体现出来了。因为*p并不是取首元素的值,它这时才相当于p[0]。那如何通过p取得首元素的值呢,很显然,应该再加一个*操作符,如下:
cout<<**p<<endl;
这时输出结果自然就会和(*p)[0]一样是1了。
wz...m@163.com
2017-10-17 · TA获得超过128个赞
知道答主
回答量:391
采纳率:0%
帮助的人:77.1万
展开全部
通过二级指针去访问二维数组需要先给二级指针分配等同于二维数组行数的一维数组指针,然后把二维数组的每行首地址赋值给对应位置的一维指针上。之后就可以通过二维指针直接访问了。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式