Forum: Mikrocontroller und Digitale Elektronik 2D Array als Zeiger übergeben?!


von UnderDog (Gast)


Lesenswert?

Hallo,

habe doch noch mal eine Frage..
Was genau macht jetzt die Klammer um "array" aus?
Mit der Klammerung funktioniert es und ohne lässt es sich nicht 
übersetzen.
1
/* funktioniert */
2
void test(char (*array)[10])
3
{
4
  printf("%s  ",&array[0]);
5
  printf("%s  ",&array[1]);
6
  printf("%s",  &array[2]);
7
}
8
9
/* funktioniert nicht */
10
void test(char *array[10])
11
{
12
  printf("%s  ",&array[0]);
13
  printf("%s  ",&array[1]);
14
  printf("%s",  &array[2]);
15
}

von Dirk B. (dirkb2)


Lesenswert?

Mit Klammer ist array ein Pointer auf ein Array von 10 char
Ohne Klammer ist array ein Array mit 10 Pointer auf char.
(siehe https://www.cdecl.org/ du solltest da aber deinen Variablennamen 
array ändern)
1
/* schon probiert */
2
void test(char *array[10])
3
{
4
  printf("%s  ", array[0]);
5
  printf("%s  ", array[1]);
6
  printf("%s",   array[2]);
7
}
Das ist in allen Fällen aber kein 2D-Array.

von UnderDog (Gast)


Lesenswert?

Dirk B. schrieb:
> Mit Klammer ist array ein Pointer auf ein Array von 10 char
> Ohne Klammer ist array ein Array mit 10 Pointer auf char.
> (siehe https://www.cdecl.org/ du solltest da aber deinen Variablennamen
> array ändern)
> /* schon probiert */
> void test(char *array[10])
> {
>   printf("%s  ", array[0]);
>   printf("%s  ", array[1]);
>   printf("%s",   array[2]);
> }
> Das ist in allen Fällen aber kein 2D-Array.

Ich habe noch vergessen die Adresse "printf" zu übergeben.
Dann klappt das mit dem 2D Array.

von Mikro 7. (mikro77)


Lesenswert?

Dirk B. schrieb:
> Ohne Klammer ist array ein Array mit 10 Pointer auf char.

Naja, ohne Klammern ist es ein Pointer auf einen Pointer auf einen char.

> Das ist in allen Fällen aber kein 2D-Array.

Das war mir auch nicht sofort klar. Wahrscheinlich ist sowas gemeint:
1
#include <stdio.h>
2
3
void test1(char (*array)[10])
4
{
5
  printf("%s",array[0]);
6
  printf("%s",array[1]);
7
  printf("%s",array[2]);
8
}
9
10
void test2(char *array[10])
11
{
12
  printf("%s",array[0]);
13
  printf("%s",array[1]);
14
  printf("%s",array[2]);
15
}
16
17
int main()
18
{
19
  char array1[3][10] = { "Hello1\n","Hello2\n","Hello3\n" } ;
20
21
  test1(array1) ;
22
  
23
  char *array2[3] = { "Hello1\n","Hello2\n","Hello3\n" } ;
24
25
  test2(array2) ;
26
  
27
  return 0 ;
28
}

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.