指针易错题

题目描述

输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。要求用3个函数实现,分别为输入10个数、进行处理、输出10个数。要求使用指针的方法进行处理。

输入

用空格隔开的10个整数。

输出

输出进行题目描述操作之后的10个整数,每个整数之后输出一个空格。
请注意行尾输出换行。

样例输 

1 5 2 4 9 0 3 8 7 6

样例输出 

0 5 2 4 6 1 3 8 7 9

 题解:

这道题难度不大,但是采用指针和引用来做的话出错的概率比较大。在这里举一个例子,int a[10], int *p = &a[0]; 这里的是一个int* 类型的指针,指向数组的第一个元素a[0], p的值存储的是首元素的地址,但是首元素的地址是const类型,不能修改,但是p的值是可以修改的,指向的元素也是可以修改的。

如果涉及*p1,*p2指向数组中的两个元素a[i],a[j] ,即使通过swap函数交换了p1p2的指向,直接printfa[i]a[j]仍然是没有交换过的值,下面给出3种利用指针或者引用的AC代码,希望能对uu们有所帮助。

 

```

#include <cstdio>
void swap(int* &a,int* &b)
{
int *temp = b;
b = a;
a = temp;
}
void swapmin (int a[10])
{
int k=0;
for(int i=0;i<10;++i)
{
if(a[i]<a[k]){
k = i;
}
}
int *p1 = &a[k]; int *p2 = &a[0];
swap(p1,p2);
int j = *p2;
a[k] = *p1;
a[0] = j;
}
void swapmax (int a[10])
{
int k=0;
for(int i=0;i<10;++i)
{
if(a[i]>a[k]){
k = i;
}
}
int *p1 = &a[k]; int *p2 = &a[9];
swap(p1,p2);
int j = *p2;
a[k] = *p1;
a[9] = j;
}
int main()
{
int n=10;
int a[10];
for(int i=0;i<10;++i)
{
scanf("%d",&a[i]);
}
swapmax(a);
swapmin(a);
for(int i=0;i<10;++i)
{
printf("%d ",a[i]);
}
return 0;
}

```
#include <cstdio>
void swap(int &a,int &b)
{
int temp = b;
b = a;
a = temp;
}
void swapmin (int a[10])
{
int k=0;
for(int i=0;i<10;++i)
{
if(a[i]<a[k]){
k = i;
}
}
// int *p1 = &a[k]; int *p2 = &a[0];
swap(a[k],a[0]);
}
void swapmax (int a[10])
{
int k=0;
for(int i=0;i<10;++i)
{
if(a[i]>a[k]){
k = i;
}
}
int *p1 = &a[k]; int *p2 = &a[9];
swap(a[k],a[9]);
}
int main()
{
int n=10;
int a[10];
for(int i=0;i<10;++i)
{
scanf("%d",&a[i]);
}
swapmax(a);
swapmin(a);
for(int i=0;i<10;++i)
{
printf("%d ",a[i]);
}
return 0;
}

```
#include <cstdio>
void swap(int* a,int* b)
{
int temp = *a;
*a = *b;
*b = temp;
}
void swapmin (int *a)
{
int k=0;
for(int i=0;i<10;++i)
{
if(*(a + i)<*(a + k)){
k = i;
}
}
swap(a + k, a);
}
void swapmax (int a[10])
{
int k=0;
for(int i=0;i<10;++i)
{
if(*(a + i)>*(a + k)){
k = i;
}
}
swap(a + k, a + 9);
}
int main()
{
int a[10];
for(int i=0;i<10;++i)
{
scanf("%d",a + i);
}
swapmax(a);
swapmin(a);
for(int i=0;i<10;++i)
{
printf("%d ",*(a + i));
}
return 0;
}

题目描述

输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。要求用3个函数实现,分别为输入10个数、进行处理、输出10个数。要求使用指针的方法进行处理。

输入

用空格隔开的10个整数。

输出

输出进行题目描述操作之后的10个整数,每个整数之后输出一个空格。
请注意行尾输出换行。

样例输入 Copy

1 5 2 4 9 0 3 8 7 6

样例输出 Copy

0 5 2 4 6 1 3 8 7 9

 

 

posted @ 2022-01-18 23:20  ClarkJS  阅读(68)  评论(0)    收藏  举报