指针易错题
题目描述
输入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函数交换了p1和p2的指向,直接printf出a[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

浙公网安备 33010602011771号