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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren