正在閱讀:C/C++中利用數(shù)組名/指針進(jìn)行排序?qū)嵗?/span>C/C++中利用數(shù)組名/指針進(jìn)行排序?qū)嵗?/h1>
2005-02-25 11:01 出處:PConline 作者:管寧 責(zé)任編輯:huangpeidan

 

  在c/c++中利用數(shù)組名作為函數(shù)參數(shù)傳遞排序和用指針進(jìn)行排序的例子。

  以下兩個例子要非常注意,函數(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ù)進(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; /* 計算10個數(shù)需要循環(huán)幾次,因為是兩兩調(diào)換第一個數(shù)組是x[0]故應(yīng)該是int(9/2) */
int temp,i,j; /* 建立零時變量temp用于每次交換處理時零時存儲x的值 */
for (i=0;i<=m;i++) 

j=n-1-i; /* 反向計算出被調(diào)換的數(shù)組下標(biāo),例如x[0] 對應(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]的實際值也就發(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ù)進(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ù)據(jù)的 */
= x; /* 利用指針變量i存儲數(shù)組a的起始地址 */
= x + ((n-1)/2); /* 計算最后一次循環(huán)的時候數(shù)組a的地址 */
= x + n - 1; /* 計算數(shù)組a也就是a[9]的結(jié)束地址好用于交換 */
for (;i<=p;i++,j--) /* 利用循環(huán)和指針進(jìn)行數(shù)組元素值的交換 */

temp=*i; /* 用temp臨時存儲*i也就是循環(huán)中a實際的值 */
*i=*j; 
*j=temp; 


 
/* 此例同樣要注意到利用指針進(jìn)行數(shù)組的操作同樣改變了實際數(shù)組各元素的值 */

302 Found

302 Found


Powered by Tengine
tengine