在c/c++中利用數(shù)組名作為函數(shù)參數(shù)傳遞排序和用指針進行排序的例子。 以下兩個例子要非常注意,函數(shù)傳遞的不是數(shù)組中數(shù)組元素的真實值而是數(shù)組在內(nèi)存中的實際地址。 #include <stdio.h> void main(void) { void reversal(); static int a[10] = {0,1,2,3,4,5,6,7,8,9}; /* 建立一個數(shù)組并初始化 */ int i; for (i=0;i<10;i++) { printf("%d ",a); } printf("\n"); reversal(a,10); /* 調(diào)用自定義涵數(shù)進行反向顯示排序,并把數(shù)組a的起始地址傳送給形式參數(shù)x */ for (i=0;i<10;i++) { printf("%d ",a); } printf("\n"); } void reversal(x,n) int x[],n; /* 定義形式參數(shù) */ { int m=(n-1)/2; /* 計算10個數(shù)需要循環(huán)幾次,因為是兩兩調(diào)換第一個數(shù)組是x[0]故應該是int(9/2) */ int temp,i,j; /* 建立零時變量temp用于每次交換處理時零時存儲x的值 */ for (i=0;i<=m;i++) { j=n-1-i; /* 反向計算出被調(diào)換的數(shù)組下標,例如x[0] 對應的x[n-1-i]就是x[9] */ temp=x; x=x[j]; x[j]=temp; } } /* 次題需要注意的是:這里由于a[10]和x[10]是共同享內(nèi)存地址位的所以進行交換后a[10]的實際值也就發(fā)生了改變 */
#include <stdio.h> void main(void) { void reversal(); static int a[10] = {0,1,2,3,4,5,6,7,8,9}; /* 建立一個數(shù)組并初始化 */ int i; for (i=0;i<10;i++) { printf("%d ",a); } printf("\n"); reversal(a,10); /* 調(diào)用自定義涵數(shù)進行反向顯示排序,并把數(shù)組a的起始地址傳送給形式參數(shù)x */ for (i=0;i<10;i++) { printf("%d ",a); } printf("\n"); } void reversal(x,n) int *x,n; /* 定義x為指針變量 */ { int temp,*p,*i,*j; /* 這里需要注意的是temp用與交換的時候臨時存儲數(shù)據(jù)的 */ i = x; /* 利用指針變量i存儲數(shù)組a的起始地址 */ p = x + ((n-1)/2); /* 計算最后一次循環(huán)的時候數(shù)組a的地址 */ j = x + n - 1; /* 計算數(shù)組a也就是a[9]的結(jié)束地址好用于交換 */ for (;i<=p;i++,j--) /* 利用循環(huán)和指針進行數(shù)組元素值的交換 */ { temp=*i; /* 用temp臨時存儲*i也就是循環(huán)中a實際的值 */ *i=*j; *j=temp; } } /* 此例同樣要注意到利用指針進行數(shù)組的操作同樣改變了實際數(shù)組各元素的值 */
|