Używam D i interfejs z niektórych bibliotek C. W rezultacie muszę przekonwertować tablice D na wskaźniki C (np. Short *). Obecnie rzuciłem je tak:Tablica wskaźnik od C do D
int[] dArray = [0, 1, 2, 3, 4];
myCFunction(cast(int*) dArray);
Czy to jest niebezpieczne? Próbowałem zrobić:
myCFunction(&dArray);
Ale to daje funkcję int [] * zamiast int *. Widzę, że w C++ niektórzy biorą pierwszy taki element:
myCFunction(&dArray[0]);
Ale czy ten wskaźnik nie wskazywałby tylko na pierwszy element? Jestem nowy w odniesieniu do wskaźników i referencji, ponieważ pochodzę ze świata Java.
Jak przekonwertować tablicę na wskaźnik, aby można było przekazać ją do funkcji C?
Czy nie działa funkcja 'myCFunction (dArray)'? –
elementy w tablicy sąsiadują w pamięci, więc '& dArray [0]' jest rzeczywiście adresem tylko do pierwszego elementu; jednak pozostała część elementów to +1, +2, itd. z tego przesunięcia. Ponadto, przekazanie tablicy rozkłada ją na wskaźnik do pierwszego elementu. 'myCFunction (dArray)' lub 'myCFunction (& dArray [0])' powinny działać – yano
@EugeneSh. Tak nie jest. Kompilator skarży się, że funkcja myCFunction (int *) nie przyjmuje parametrów myCFunction (int []); – jython234