一道C++有关指针的题目谁可以帮我解释一下?

#include<iostream.h>voidfun(int*s,intn1,intn2){inti,j,t;i=n1;j=n2;while(i<j){t=*(s+i)... #include <iostream.h>

void fun(int *s, int n1, int n2)
{
int i, j, t;
i=n1; j=n2;
while (i<j)
{
t=*(s+i); *(s+i)=*(s+j); *(s+j)=t;
i++; j--;
}
}

void main( )
{
int a[10]={1, 2, 3, 4, 5, 6, 7, 8, 9, 0}, i, *p=a;
fun(p, 0, 3);
fun(p, 4, 9);
fun(p, 0, 9);
for (i=0; i<10; i++)
{
cout << *(a+i);
cout << endl;
}
}

指针的概念不太懂
谁能帮我注释一下谢谢
最好写得详细点..
对了.题目是写出运行结果
展开
 我来答
firev000
2010-07-09 · TA获得超过492个赞
知道小有建树答主
回答量:877
采纳率:0%
帮助的人:684万
展开全部
跟你写几个关键的地方吧
int a[10]={1, 2, 3, 4, 5, 6, 7, 8, 9, 0}, i, *p=a;
fun(p, 0, 3);
所以fun里面的s 就是 a, i =0, j=3

*(s+i) 等同与 a[0], *(s+j)=a[3]
t=*(s+i); *(s+i)=*(s+j); *(s+j)=t;
相当于替换了a[0],a[3]的值,由于指针指向的是内存地址,所以a[0],a[3]的值是永久替换的,就是说在FUN方法执行完了以后,a的值就变了
百度网友a9ca369
2010-07-09 · TA获得超过143个赞
知道小有建树答主
回答量:200
采纳率:0%
帮助的人:179万
展开全部
void fun(int *s, int n1, int n2)
{
int i, j, t;
i=n1;
j=n2;
while ( i < j )
{
//s通过地址传递也指向了a[0],s + i就是从a[0]往后挪i //位置 *(s+i) 就是a[0 + i ]的值

t=*(s+i); *(s+i)=*(s+j);
*(s+j)=t;
i++;
j--;
}
}

void main( )
{
int a[10]={1, 2, 3, 4, 5, 6, 7, 8, 9, 0}, i;
int *p=a; //p指向数组a的第一个就是a[0]的地址
fun(p, 0, 3);//a[0]与a[3]换,a[1] 与a[2]换
//a[10] = {4,3,2,1,5,6,7,8,9,0}
fun(p, 4, 9);//自己后面算吧a[10] = {4,3,2,1,0,9,8,7,6,5}
fun(p, 0, 9); //a[10]={5,6,7,8,9,0,1,2,3,4}
for (i=0; i<10; i++)
{
cout << *(a+i);
cout << endl;
}//
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友6030387
2010-07-09 · TA获得超过217个赞
知道答主
回答量:106
采纳率:0%
帮助的人:95.4万
展开全部
楼上写的你如果原来不懂的话,看过他写的,必然还是不懂。

你去翻阅下C++ 关于指针这一节吧,看看就明白的。这样空说也比较难说明白。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ytu_math
2010-07-17 · TA获得超过1558个赞
知道小有建树答主
回答量:784
采纳率:100%
帮助的人:869万
展开全部
我来回答。
要看懂这到题,首先要先看懂 函数fun.

void fun(int *s, int n1, int n2)
{
int i, j, t;
i=n1; j=n2;
while (i<j)
{
t=*(s+i); *(s+i)=*(s+j); *(s+j)=t;
i++; j--;
}
}

首先,看函数fun ,一共有3个参数,1个为整型数组,2个为整数值。
t=*(s+i); *(s+i)=*(s+j); *(s+j)=t;
以上3个语句,实际上是最常用的语句,
我用数组的概念给大家展示,在指针操作中,*(s+i) 实际上相当于s[i],
t=s[i]; s[i]=s[j]; s[j]=t;
现在一看是不是明白了,原来是s[i],s[j] 2个数值互换。

接下来, i++; j--; 进入循环,继续互换下2个数据。

上述函数的功能就是给定一整数类型的数组s,然后给定2个在数组长度范围内的两个数n1,n2 ,如果n1<n2, 则将数组s[n1]与s[n2]互换,s[n1 +1]与s[n2 -1]互换,....,共进行(int)((n2 - n1)/2 ) + 1 互换。

了解了fun函数所表示的意义,我们就可以看主函数了,
void main( )
{
//定义整型数组a,输出循环变量i
int a[10]={1, 2, 3, 4, 5, 6, 7, 8, 9, 0}, i;

//定义整型指针p指向数组a
int *p=a;

// 通过指针p传递数组a, 用函数fun使
// a[0]与a[3]换,a[1] 与a[2]换
// a[10]={4, 3, 2, 1, 5, 6, 7, 8, 9, 0}
fun(p, 0, 3);

// 在上述交换完的基础上
// 通过指针p传递数组a, 用函数fun使
// 【4,9】【5,8】【6,7】 换
// a[10]={4, 3, 2, 1, 0, 9, 8, 7, 6, 5}
fun(p, 4, 9);

// 在a[10]={4, 3, 2, 1, 0, 9, 8, 7, 6, 5}的基础上
// 通过指针p传递数组a, 用函数fun使
// 【0,9】【1,8】【2,7】【3,6】【4,5】 换
// a[10]={5, 6, 7, 8, 9, 0, 1, 2, 3, 4}
fun(p, 0, 9);

for (i=0; i<10; i++)
{
cout << *(a+i);
cout << endl;
}//
}

// 输出结果
5
6
7
8
9
0
1
2
3
4

其实楼上都已经写清楚了,我只是详细地进行了解释,不知这样能看懂否?

希望你能好好学习,尽快提高C++的水平,如果有问题,请给我留言!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式