C程式設計--指標(用“ 函式 ”對“ 陣列 ” 進行操作)
阿新 • • 發佈:2018-11-11
函式運算元組
說明:如果有一個實引數組,想要在函式中改變此陣列中的元素的值,實參與形參的對應關係有以下4種情況:
- 1、實參:陣列名 ;; 形參:陣列名
- 2、實參:陣列名 ;; 形參:指標變數
- 3、實參:指標變數;; 形參:指標變數
- 4、實參:指標變數 ;;形參:陣列名
問題1:將陣列a中n個整數按相反順序存放
程式碼實現
1、實參:陣列名 ;; 形參:陣列名
#include<stdio.h> void reversal(int x[],int n); int main(){ int a[10]={3,7,9,11,0,6,7,5,4,2}; printf("原陣列元素為:\n"); for(int i=0;i<10;i++){ printf("%d ",a[i]); } reversal(a,10); printf("\n反序陣列元素為:\n"); for(i=0;i<10;i++){ printf("%d ",a[i]); } printf("\n"); return 0; } void reversal(int x[],int n){ int mid=n/2+1,temp; for(int i=0;i<mid;i++){ temp=x[i]; x[i]=x[n-1-i]; x[n-1-i]=temp; } }
2、實參:陣列名 ;; 形參:指標變數
#include<stdio.h> void reversal(int *x,int n); int main(){ int a[10]={3,7,9,11,0,6,7,5,4,2}; printf("原陣列元素為:\n"); for(int i=0;i<10;i++){ printf("%d ",a[i]); } reversal(a,10); printf("\n反序陣列元素為:\n"); for(i=0;i<10;i++){ printf("%d ",a[i]); } printf("\n"); return 0; } void reversal(int *x,int n){ int mid=n/2+1,temp; int *p_start=x,*p_mid=x+mid,*p_end=x+n-1; for( ; p_start<p_mid ; p_start++,p_end--){ temp=*p_start; *p_start=*p_end; *p_end=temp; } }
3、實參:指標變數;; 形參:指標變數
#include<stdio.h> void reversal(int *x,int n); int main(){ int a[10]={3,7,9,11,0,6,7,5,4,2}; int *p=a; printf("原陣列元素為:\n"); for(int i=0;i<10;i++){ printf("%d ",a[i]); } reversal(p,10); printf("\n反序陣列元素為:\n"); for(i=0;i<10;i++){ printf("%d ",a[i]); } printf("\n"); return 0; } void reversal(int *x,int n){ int mid=n/2+1,temp; int *p_start=x,*p_mid=x+mid,*p_end=x+n-1; for( ; p_start<p_mid ; p_start++,p_end--){ temp=*p_start; *p_start=*p_end; *p_end=temp; } }
4、實參:指標變數 ;;形參:陣列名
#include<stdio.h>
void reversal(int x[],int n);
int main(){
int a[10]={3,7,9,11,0,6,7,5,4,2};
int *p=a;
printf("原陣列元素為:\n");
for(int i=0;i<10;i++){
printf("%d ",a[i]);
}
reversal(p,10);
printf("\n反序陣列元素為:\n");
for(i=0;i<10;i++){
printf("%d ",a[i]);
}
printf("\n");
return 0;
}
void reversal(int x[],int n){
int mid=n/2+1,temp;
for(int i=0;i<mid;i++){
temp=x[i];
x[i]=x[n-1-i];
x[n-1-i]=temp;
}
}
問題2:用指標方法對10個整數按由小到大的順序排序
#include<stdio.h>
void sort(int x[],int n);
//方法二:void sort(int *x,int n);
int main(){
int a[10]={3,7,9,11,0,6,1,5,4,2};
int *p=a;
printf("原陣列元素為:\n");
for(int i=0;i<10;i++){
printf("%d ",a[i]);
}
sort(p,10);
printf("\n排序後的陣列元素為:\n");
for(i=0;i<10;i++){
printf("%d ",a[i]);
}
printf("\n");
return 0;
}
void sort(int x[],int n){
int max;
//選擇排序法
for(int i=0;i<n-1;i++){
max=i;
for(int j=i+1;j<n;j++){
if(x[j]>x[max]){
max=j;
}
}
if(max!=i){
int temp=x[max];
x[max]=x[i];
x[i]=temp;
}
}
}
/*
//方法二:
void sort(int *x,int n){
int max;
//選擇排序法
for(int i=0;i<n-1;i++){
max=i;
for(int j=i+1;j<n;j++){
if(*(x+j)>*(x+max)){
max=j;
}
}
if(max!=i){
int temp=*(x+i);
*(x+i)=*(x+max);
*(x+max)=temp;
}
}
}
*/