2015-05-10 18 views
-1

當我在交換函數中傳遞參數時,我期望指數爲a[0]a[1]的輸出。但輸出結果分別顯示a[1]a[2]的數據。將數組作爲參數傳遞並交換數據 - 意外的數據

但是爲什麼?以及如何改進它?

以下是我的代碼。

#include <stdio.h> 
#include <stdlib.h> 

int add(int *array,int max); 
void swap(int *array,int max,int *x,int *y); 

int main() 
{ 
    int sum,i,j=0,a[10],max; 

    scanf("%d",&max); 

    for(i=0;i<max;i++) 
    { 
     scanf("%d",&a[i]); 
    } 

    for(i=0;i<max;i++) 
    { 
     printf(" %d ",a[i]); 
    } 

    printf("\n"); 

    //for(i=0;i<max;i++) 
    { 
     swap(a,max,&a[0],&a[1]); 
    } 
    sum=add(a,max); // array name is same as address of array//or sum=add(&a[0],max); 
    printf("%d",sum); 
} 

int add(int *array,int max) 
{ 
    int sum=0,i=0; 
    while(i<max) 
    { 
     sum=sum +array[i]; 
     i++; 
    } 
    return sum; 
} 

void swap(int *a,int max, int *x,int *y) 
{ 
    int i; 
    /* int temp=0; 

    temp=a[*x]; 
    a[*x]=a[*y]; 
    a[*y]=temp;*/ 
    printf("\n%d %d",a[*x],a[*y]); 
    for(i=0;i<max;i++) 
    { 
     printf("\n %d",a[i]); 
    } 
    printf("\n"); 
} 

回答

0

您的問題是在下面的行

printf("\n%d %d",a[*x],a[*y]); 

有了這樣

swap(a,max,&a[0],&a[1]); 

swap()呼叫如果a[0]a[1]的值大於10多,你正在訪問陣列越界。請檢查並更正您的邏輯。

FWIW,

但輸出表示從數據A [1]和[2]分別

這是因爲,最可能的是,a[0]包含1a[1]包含'2

+0

它並沒有超出限制,因爲我總是訪問數組,對於i <10,也是a [0] = 1,a [1] = 2,a [2] = 3等等直到a [4] = 5,因爲我採取最大= 5。對不起,我是新手編程 –

+0

@deepakpandey在詢問用戶輸入時,你如何保證'[0] == 1'總是如此? –

+0

@deepakpandey沒什麼可對不起的朋友,只要邏輯思考。 :-) –

0

我試過了,現在工作正常。謝謝

int add(int *array,int max); 
void swap(int *array,int max,int *x,int *y); 

    int main() 
    { 
    int sum,i,j=0,a[10],max; 

    printf("enter the size \n"); 

     scanf(" %d",&max); 

     for(i=0;i<max;i++) 
    { 
     scanf("%d",&a[i]); 
     } 

      for(i=0;i<max;i++) 
    { 
     printf(" data entered a[%d] = %d \n ",i,a[i]); 
     } 

printf("\n"); 


printf("%d",&a[1]); 

     //for(i=0;i<max;i++) 
    { 

     swap(a,max,&a[0],&a[1]); 

     } 
     sum=add(a,max); // array name is same as address of array//or sum=add(&a[0],max); 
     printf("%d",sum); 
} 

    int add(int *array,int max) 
    { 
     int sum=0,i=0; 
     while(i<max) 
     { 


    sum=sum +array[i]; 
    i++;} 
    return sum; 
    } 

void swap(int *a,int max, int *x,int *y) 
{ 
int i,temp; 
    temp=*y; 
    *y=*x; 
    *x=temp; 

    printf("\n%d %d",*x,y); 
    for(i=0;i<max;i++) 
    { 
     printf("\n %d",a[i]); 
    } 

printf("\n"); 

}