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