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

2025-05-10 23:48:46
推荐回答(4个)
回答1:

跟你写几个关键的地方吧
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的值就变了

回答2:

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;
}//
}

回答3:

楼上写的你如果原来不懂的话,看过他写的,必然还是不懂。

你去翻阅下C++ 关于指针这一节吧,看看就明白的。这样空说也比较难说明白。

回答4:

我来回答。
要看懂这到题,首先要先看懂 函数fun.

void fun(int *s, int n1, int n2)
{
int i, j, t;
i=n1; j=n2;
while (i {
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
了解了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++的水平,如果有问题,请给我留言!