正在閱讀: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)行排序的例子。

  以下兩個(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ù)的 */
= x; /* 利用指針變量i存儲(chǔ)數(shù)組a的起始地址 */
= x + ((n-1)/2); /* 計(jì)算最后一次循環(huán)的時(shí)候數(shù)組a的地址 */
= 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ù)組各元素的值 */

302 Found

302 Found


Powered by Tengine
tengine