2D Array als Zeiger übergeben?!

Gast #5275845
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
}
#5275847
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.
Gast #5275850
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.
#5275962
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
}

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 8 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.