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

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