2013-05-29 7 views
1

Если есть функция, которая объявлена ​​как недействительного Foo (Char сек []), а другой объявлен как пустот слизи (символ * ов), то это два эквивалент деклараций?Являются ли аргументы эквивалентной функции "char s []" и "char * s"?

+0

указатель = массив – squiguy

+1

Да, прототипы эквивалентны. 'foo' получает указатель на' char' в обоих случаях. Проверьте последнюю онлайн-версию стандарта языка C [N1570.pdf] (http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf), раздел 6.3.2.1, пункт 3 , и раздел 6.7.6.3, пункт 7. –

ответ

7

Да, массив всегда распадается на указатель при передаче функции в качестве аргумента.

Это будет печатать один и тот же результат:

#include <stdio.h> 

void foo(char* arg, int size) 
{ 
    int i; 
    for (i = 0; i < size; i++) 
     printf("%c", arg[i]); 
    printf("\n"); 
} 

void bar(char arg [], int size) 
{ 
    int i; 
    for (i = 0; i < size; i++) 
     printf("%c", arg[i]); 
    printf("\n"); 
} 

int main() 
{ 
    foo("Hello, World!", 13); 

    bar("Hello, World!", 13); 

    return 0; 
} 

Выход:

./a.out 
Hello, World! 
Hello, World! 
Смежные вопросы