Загадочный вызов C-функции - PullRequest
1 голос
/ 26 октября 2011

У меня есть этот код:

int indexOf(const char *array[], char *e)
{
     printf("inside: %d\n",(int)sizeof(array));
/* ... */
}

int main(int argc, char *argv[])
{

    const char *a[] = {";", ",", ":", "==", ":="};
    char *b = "==";
    printf("outside: %d\n",(int)sizeof(a));
    int d = indexOf(a,b);
/* ... */
}

И это вывод:

outside: 40
inside: 8

Почему вывод не совпадает?Любая помощь, пожалуйста?

1 Ответ

9 голосов
/ 26 октября 2011

Массив превращается в указатель на свой первый элемент при передаче в функцию.sizeof из функции возвращает размер указателя на вашу реализацию.Вы могли бы объявить это:

int indexOf(const char **array, char *e)

Возможно, вы захотите передать длину в качестве отдельного параметра.

РЕДАКТИРОВАТЬ

То, что я пытаюсь эточтобы не передавать размер в качестве параметра.

В этом случае вы можете пометить конец массива с помощью NULL

const char *a[] = {";", ",", ":", "==", ":=", NULL};

Таким образом, в функции, которую выбудет знать, где это заканчивается.

...