Hallo,
ich habe eine Verständnisfrage zu Pointern: wenn ich mit einer
C-Funktion einen Pointer außerhalb der Funktion ändern möchte, dann darf
die C-Funktion nicht einen "einfachen" Pointer als Parameter erwarten,
sondern es muss ein Pointer auf einen Pointer sein, ist das korrekt?
Also anstatt:
1 | uint8_t Arr_A[8];
|
2 | uint8_t Arr_B[8];
|
3 | uint8_t *PtrArr = Arr_A[0];
|
4 |
|
5 | void A(uint8_t *Ptr) {
|
6 | Ptr = Arr_B[0];
|
7 | }
|
8 |
|
9 | int main(void) {
|
10 | A(PtrArr);
|
11 | }
|
muss es lauten:
1 | void A(uint8_t **Ptr) { //Pointer auf Pointer
|
2 | *Ptr = Arr_B[0];
|
3 | }
|
4 |
|
5 | int main(void) {
|
6 | A(&PtrArr); //Adresse des Pointers übergeben
|
7 | }
|
weil der Pointer als Parameter selbst nur by-value übergeben wird. Im
ersten Codeschnipsel würde demnach nur innerhalb der Funktion auf das
zweite Array verwiesen, PtrArr selbst würde nicht geändert. Stimmt das
so?
Wenn statt auf Arrays auf Structs verwiesen wird, deren Member selbst
Pointer auf Arrays sind, würde es aber mit einfachen Pointern
funktionieren, richtig?
Ralf