C/C++中利用數組名/指標進行排序執行個體

來源:互聯網
上載者:User

在c/c++中利用數組名作為函數參數傳遞排序和用指標進行排序的例子。

以下兩個例子要非常注意,函數傳遞的不是數組中數組元素的真實值而是數組在記憶體中的實際地址。

#include <stdio.h>
void main(void)
{
void reversal();
static int a[10] = {0,1,2,3,4,5,6,7,8,9}; /* 建立一個數組並初始化 */
int i;
for (i=0;i<10;i++)
{
printf("%d ",a);
}
printf("\n");
reversal(a,10); /* 調用自訂涵數進行反向顯示排序,並把數組a的起始地址傳送給形式參數x */
for (i=0;i<10;i++)
{
printf("%d ",a);
}
printf("\n");

}

void reversal(x,n)
int x[],n; /* 定義形式參數 */
{
int m=(n-1)/2; /* 計算10個數需要迴圈幾次,因為是兩兩調換第一個數組是x[0]故應該是int(9/2) */
int temp,i,j; /* 建立零時變數temp用於每次交換處理時零時儲存x的值 */
for (i=0;i<=m;i++)
{
j=n-1-i; /* 反向計算出被調換的數組下標,例如x[0] 對應的x[n-1-i]就是x[9] */
temp=x;
x=x[j];
x[j]=temp;
}
}

/* 次題需要注意的是:這裡由於a[10]和x[10]是共同享記憶體位址位的所以進行交換後a[10]的實際值也就發生了改變 */

#include <stdio.h>
void main(void)
{
void reversal();
static int a[10] = {0,1,2,3,4,5,6,7,8,9}; /* 建立一個數組並初始化 */
int i;
for (i=0;i<10;i++)
{
printf("%d ",a);
}
printf("\n");
reversal(a,10); /* 調用自訂涵數進行反向顯示排序,並把數組a的起始地址傳送給形式參數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用與交換的時候臨時儲存資料的 */
i = x; /* 利用指標變數i儲存數組a的起始地址 */
p = x + ((n-1)/2); /* 計算最後一次迴圈的時候數組a的地址 */
j = x + n - 1; /* 計算數組a也就是a[9]的結束位址好用於交換 */
for (;i<=p;i++,j--) /* 利用迴圈和指標進行數組元素值的交換 */
{
temp=*i; /* 用temp臨時儲存*i也就是迴圈中a實際的值 */
*i=*j;
*j=temp;
}
}
/* 此例同樣要注意到利用指標進行數組的操作同樣改變了實際數組各元素的值 */

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.