2014-10-18 15 views
7

G'day!Передача массива как аргумент функции из функции, которая принимает его как аргумент в C

Если у меня есть функция, которая принимает массив из ints в качестве аргумента, а затем изнутри этой функции, отсылает тот же массив к другой функции, будет ли он по-прежнему редактировать значения массива и иметь их совершенных на основном уровне, а не на функциональном уровне?

т.е.

int 
main(int argc, char *argv[]) { 
    int A[50]; 
    functionB(A); 
} 

, где функция В выглядит следующим образом:

void functionB(int A[]) { 
    functionC(A); 
} 

и функция С является тот, который на самом деле мутирует значения в пределах [].

Можете ли вы увидеть измененный массив или оригинал A []?

Спасибо!

+2

Да, исходный массив будет изменен. –

+1

Что случилось, когда вы попробовали? –

ответ

10

Array распадается на указатель. Поэтому он изменит исходный массив.

Проверить это

void functionC(int A[]) { 
    A[0] = 1; 
    A[1] = 2; 
} 

void functionB(int A[]) { 
    functionC(A); 
} 

int 
main(int argc, char *argv[]) { 
    int A[2]={5,5}; 

    printf("Before call: %d %d\n",A[0],A[1]); 
    functionB(A); 
    printf("After call : %d %d\n",A[0],A[1]); 
}