指標實踐(3)
阿新 • • 發佈:2021-02-04
陣列與指標
示例(1)
從10個數中找出最大值與最小值
#include<stdio.h>
int max,min;
void max_minjudge(int arr[10],int n);
int main()
{
int arr[10];
int i;
printf("請對10個數進行初始化\n");
for(i=0;i<10;i++)
{
scanf("%d",&arr[i]);
}
max_minjudge(arr,10);
printf("max=%d,min=%d\n" ,max,min);
return 0;
}
void max_minjudge(int arr[10],int n)
{
int *p,*arr_end;
arr_end=arr+n;
max=min=*arr;
for(p=arr+1;p<arr_end;p++)
{
if(*p>max)
max=*p;
else if(*p<min)
min=*p;
}
}
程式碼分析:
int max,min;為全域性變數。
max=min=*arr;這一段因陣列名即為地址直接運用取值符號✳即可。取陣列元素第一個。
同時定義第一個陣列元素為最大、最小值並不衝突,因為max和min為兩個變數只是把同一值賦值給他們,與其餘元素分別進行比較。
錯點分享
一開始我在碼的時候把子函寫成這樣:
void max_minjudge(int arr[10],int n)
{
int *p;
max=min=*arr;
for(p=arr+1;p<10;p++)
{
if(*p>max)
max=*p;
else if(*p<min)
min=*p;
}
}
執行結果如下:
對於for(p=arr+1;p<arr_end;p++)
p=arr+1是以陣列名加數字表示從第幾個元素開始,當把p<arr_end(注:arr_end=arr+n)
改成p<10時,整個迴圈體執行不了,也就做不出判斷,就停留在第一個元素。
因為這裡的p是指標(也就是地址)與其相對應不能是值,除非*p。