Nie ma. Dzieje się tak, ponieważ tablice ulegną zniszczeniu do wskaźnika do pierwszego elementu podczas przechodzenia do funkcji.
Musisz sam przekazać długość lub użyć czegoś w tablicy, aby wskazać rozmiar.
Najpierw opcja "podaj długość". Nazywają swoją funkcję z czymś takim:
int setIncludes (char *includes[], size_t count) {
// Length is count.
}
:
char *arr[] = {"Hello,", "my", "name", "is", "Pax."};
setIncludes (arr, sizeof (arr)/sizeof (*arr));
setIncludes (arr, 2); // if you don't want to process them all.
Sposób Sentinel wykorzystuje specjalną wartość na koniec wskazać nie więcej elementów (podobny do \0
na końcu C char
tablicy wskazać ciąg) i byłoby coś takiego:
int setIncludes (char *includes[]) {
size_t count = 0;
while (includes[count] != NULL) count++;
// Length is count.
}
:
char *arr[] = {"Hello,", "my", "name", "is", "Pax.", NULL};
setIncludes (arr);
Inną metodą widziałem używane (głównie dla integralnych tablic) jest użycie jako pierwszy element długości (podobny do Rexx Zmienne macierzyste):
int setIncludes (int includes[]) {
// Length is includes[0].
// Only process includes[1] thru includes[includes[0]-1].
}
:
int arr[] = {4,11,22,33,44};
setIncludes (arr);
Tak jak maksymalna wartość? –
Zakładając, że masz na myśli pierwszy, @Mohit, rodzaj. Sztuczka 'sizeof' zawsze da ci długość tablicy (zakładając, że nie została już zepsuta do wskaźnika). Elastyczność polega na tym, że nie ograniczasz się do przekazywania tej wartości. Jeśli masz tablicę wielkości 1000, ale tylko 20 użytecznych wartości, możesz podać 20 jako rozmiar. – paxdiablo
Dlaczego przechodzisz tablicę 'int' do funkcji, która oczekuje tablicy' char * '? – caf