輸入10個整數,其中將最小的與第一個數交換,把最大的數與最后一個元素交換。寫3個函式:①輸入10個整數②進行處理③輸出10個數。
編輯器顯示0warning0error,但最后卻運行不了顯示有問題。。。是哪里編錯了嗎
#include<stdio.h>
void inp(int *p);
void change(int *p);
void oup(int *p);
main()
{int a[10],*p=a;
inp(p);
change(p);
oup(p);
}
void inp(int *p)
{int i;
printf("Please input 10 integers:");
for(i=0;i<10;i++)
scanf("%d",*(p+i));
}
void change(int *p)
{int temp,*min,*max,n;
min=p;
for (n=1;n<10;n++)
{if (*min>*(p+n))
min=p+n;
}
temp=*p;
p=min;
*min=temp;
max=p;
for (n=1;n<10;n++)
{if (*max<*(p+n))
max=p+n;
}
temp=*(p+9);
*(p+9)=*max;
*max=temp;
}
void oup(int *p)
{int i;
for(i=0;i<10;i++)
printf("%d",*(p+i));
}
uj5u.com熱心網友回復:
必須要求用指標完成嗎?如果不是用陣列形式完成吧,你這指標交換應該有錯誤uj5u.com熱心網友回復:
#include<stdio.h>
void inp(int *p);
void change(int *p);
void oup(int *p);
int main()
{
int a[10], *p = a;
inp(p);
change(p);
oup(p);
return 0;
}
void inp(int *p)
{
int i;
printf("Please input 10 integers:\n");
for (i = 0; i<10; i++)
scanf("%d", (p + i));//-----------*(p+i)改為(p+i)-------------
}
void change(int *p)
{
int temp, *min, *max, n;
min = p;
for (n = 1; n<10; n++)
{
if (*min>*(p + n))
min = p + n;
}
temp = *p;
*p = *min;//---------p=min改為*p=*min---------
*min = temp;
max = p;
for (n = 1; n<10; n++)
{
if (*max<*(p + n))
max = p + n;
}
temp = *(p + 9);
*(p + 9) = *max;
*max = temp;
}
void oup(int *p)
{
int i;
for (i = 0; i<10; i++)
printf("%d ", *(p + i));//----------%d之后添加一個空格------------
}
VS2015 C++環境除錯
uj5u.com熱心網友回復:
可以了!能否麻煩再問您一下為什么p=a(陣列)時不加*,scanf時不加*,但*p=*min,printf的時候要加*嗎。。。
uj5u.com熱心網友回復:
好好看下指標的知識,指標的本質就是指向一個地址,給指標賦值自然要賦地址,陣列中陣列名代表的是這片陣列空間的首地址
scanf更改地址空間的內容,即是改變一片地址的內容所以需要傳入的變數的地址
*p=*min這里*是取值,也就是已經找到地址,但是要把這個地址的值改掉,所以后面對應的也要賦一個值
printf這個使用要看情況,你可以嘗試用跟不用都輸出一下看看區別,變數,一級指標,二級指標都試一下,傳不同的內容,整型,字符,字串,基本上試完就差不多懂了
我不知道這樣講能不能理解,可能講的跟本質有點出入,畢竟自己組織的話,建議你去看下*在指標上不同的用法,再看看這幾個函式的原型,好理解一些
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/69207.html
標籤:C++ 語言
上一篇:求答案!
