array pointer an funktion problem

Gast #6957666
Lesenswert?
• ▲
▼
Ich habe ein array, welches an einer Funktion übergeben wird.
Dort sollen die Werte bearbeitet werden und nach dem Funktionsaufruf die 
neuen werte zur Verfügung sein.
Dies funktioniert bei mir aber irgendwie nicht
1
void funktion1(uint16_t* arr1, uint16_t* arr2, uint8_t length);
2
{
3
  for(uint8_t x=0; x<length; x++)
4
  {
5
    arr2[x] = arr1[x] / 2;
6
    printf("arr1[%d]: %d     arr2[%d]: %d\r\n", x, arr1[x], x, arr2[x]);
7
  }
8
}

Die Ausgabe ist dann
1
arr1[0]: 100    arr2[0]: 50
2
arr1[1]: 100    arr2[1]: 50
3
arr1[2]: 100    arr2[2]: 50
4
... ... ...

Die Funktion rufe ich wie folgt auf
1
void funktion(void)
2
{
3
  uint16_t arr1[10] = {0};
4
  uint16_t arr2[10] = {0};
5
  for(uint8_t x=0; x<10; x++)
6
  {
7
    arr1[x] = 100;
8
  }
9
  funktion1(&arr1[0], &arr2[0], 10);
10

11
  for(uint8_t x=0; x<10; x++)
12
  {
13
    printf("arr1[%d]: %d     arr2[%d]: %d\r\n", x, arr1[x], x, arr2[x]);
14
  }
15
}

Die Ausgabe ist dann
1
arr1[0]: 100    arr2[0]: 0
2
arr1[1]: 100    arr2[1]: 0
3
arr1[2]: 100    arr2[2]: 0
4
... ... ...

warum ist arr2 immernoch 0? es wird doch eigentlich in funktion1 
geändert?
#6957669
Lesenswert?
• ▲
▼
Wie groß ist eine int bei dir?

%d ist die Formatierung, um eine int dezimal auszugeben.
Du versuchst es aber mit uint8_t und uint16_t, dann findet printf() 
nicht die Werte auf dem Stack.

Die richtige Formatierung wäre:
1
#include <inttypes.h>
2
#include <stdint.h>
3
...
4
  printf( "arr1[%"PRIu8"]: %"PRIu16"     arr2[%"PRIu8"]: %"PRIu16"\r\n", x, arr1[x], x, arr2[x] );
Gast #6957679
Lesenswert?
• ▲
▼
Hallo,

ist das C? Ich wusste garnicht, dass man die Definition des Iterators so 
in die for-Schleife einbringen kann -- Naja.
Ich habe leider keinen Fehler gefunden, nur eine Anmerkungen

Jan schrieb:
1
>   uint16_t arr1[10] = {0};
2
>   uint16_t arr2[10] = {0};
Du initialisierst nur das erste Feld des Arrays? Wozu ist ist das gut?
#6957702
Lesenswert?
• ▲
▼
Funktioniert bei mir.

Zeit doch mal das Programm was bei dir tatsächlich compiliert und 
ausgeführt wird.
1
> gcc -o test test.c
2
> ./test
3
arr1[0]: 100     arr2[0]: 50
4
arr1[1]: 100     arr2[1]: 50
5
arr1[2]: 100     arr2[2]: 50
6
arr1[3]: 100     arr2[3]: 50
7
arr1[4]: 100     arr2[4]: 50
8
arr1[5]: 100     arr2[5]: 50
9
arr1[6]: 100     arr2[6]: 50
10
arr1[7]: 100     arr2[7]: 50
11
arr1[8]: 100     arr2[8]: 50
12
arr1[9]: 100     arr2[9]: 50
13
arr1[0]: 100     arr2[0]: 50
14
arr1[1]: 100     arr2[1]: 50
15
arr1[2]: 100     arr2[2]: 50
16
arr1[3]: 100     arr2[3]: 50
17
arr1[4]: 100     arr2[4]: 50
18
arr1[5]: 100     arr2[5]: 50
19
arr1[6]: 100     arr2[6]: 50
20
arr1[7]: 100     arr2[7]: 50
21
arr1[8]: 100     arr2[8]: 50
22
arr1[9]: 100     arr2[9]: 50
Angehängte Dateien:

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.