C ++ - Zeichenfolgen: [] vs. *
Sehen Sie sich die Exkursion: Multidimensionale Arrays an, in der beschrieben wird, wie Sie multidimensionale Arrays als Argumente an Funktionen übergeben. Grundsätzlich möchten Sie Ihren Code in diesen ändern:
%Vor% Alle bis auf die letzten Dimensionen müssen der aufgerufenen Funktion bekannt sein. Andernfalls würde der Compiler nicht in der Lage sein, den korrekten Abstand zu Werten in Ihrem Array zu berechnen (a [1] ist sizeof(double[2])
bytes entfernt von [0]).
Sie scheinen in der Lage zu sein, das Array zu akzeptieren, ohne die Größe der Dimensionen zu kennen. Sie können dafür Vorlagen verwenden:
%Vor%Der Compiler erstellt eine Kopie (instanziieren) dieser Vorlage für jeden Wert von N, der mit der Funktion verwendet wird, wobei automatisch die richtige N abgeleitet wird.
Das Problem ist, dass ein double ** ein Zeiger auf einen Zeiger ist. Ihre 'f' Funktion möchte die Adresse eines Zeigers an ein Double übergeben werden. Wenn Sie f (var) aufrufen, nun, wo genau denken Sie, dass der Zeiger ist? Es existiert nicht.
Das wird funktionieren:
%Vor%Es würde auch funktionieren, die Definition von f zu ändern:
%Vor%Nun nimmt f einen Zeiger auf die Art von Array, die Sie haben. Das wird funktionieren.
Tags und Links c++