Ingo schrieb:
> Wie komme ich auf den Array Index und wie auf den Inhalt?
Die Frage ist eigentlich: Wozu brauchst du dieses konkret?
Denn ...
> Jetzt möchte ich einer Funktion, dieses Array übergebem:
> void Fkt (int* pArray)
> {
>   /* Hier wird einmal der Arrayindex gebraucht und der Inhalt des Feldes*/
>
> }
>
> Fkt (&Array[x]);
...
die Funktion hat keine Möglichkeit festzustellen, was mit diesem 
Pointer, den sie bekommt, los ist. Alles was sie weiß, ist:
Ich kriege einen Pointer auf einen int
| 1 | void Fkt( int* pIntWert )
 | 
| 2 | {
 | 
| 3 |   ...
 | 
| 4 | }
 | 
Ob dieser Pointer jetzt auf einen einsamen int zeigt ...
| 1 | int main()
 | 
| 2 | {
 | 
| 3 |   int i;
 | 
| 4 | 
 | 
| 5 |   Fkt( &i );
 | 
| 6 | }
 | 
... oder ob dieser int Teil einer Struktur ist ...
| 1 | struct check
 | 
| 2 | {
 | 
| 3 |   int a;
 | 
| 4 |   int b;
 | 
| 5 | }
 | 
| 6 | 
 | 
| 7 | int main()
 | 
| 8 | {
 | 
| 9 |   struct check myVar;
 | 
| 10 | 
 | 
| 11 |   Fkt( &(myVar.b) );
 | 
| 12 | }
 | 
... ob dieser int durch eine Speicherallokierung entstanden ist ...
| 1 | int main()
 | 
| 2 | {
 | 
| 3 |   int * pAlloc = malloc( 1 * sizeof(int) );
 | 
| 4 | 
 | 
| 5 |   Fkt( pAlloc );
 | 
| 6 | }
 | 
ob dieser int Teil eines Arrays ist
| 1 | int main()
 | 
| 2 | {
 | 
| 3 |   int Werte[5];
 | 
| 4 | 
 | 
| 5 |   Fkt( &Werte[3] );
 | 
| 6 | }
 | 
... oder ob dieser Pointer eventuell sogar auf den ersten int eines 
Arrays zeigt und so stellvertretend für das ganze Array steht ...
| 1 | int main()
 | 
| 2 | {
 | 
| 3 |   int Werte[5];
 | 
| 4 | 
 | 
| 5 |   Fkt( Werte );
 | 
| 6 | }
 | 
... all das weiß die Funktion nicht und sie kann es auch nicht 
feststellen. Alles was die Funktion weiß ist: da ist ein Pointer und der 
zeigt auf einen Speicherbereich, an dem ein int angesiedelt ist.
Nicht mehr und nicht weniger. Die Funktion hat keine Möglichkeit anhand 
des Pointers festzustellen, wie und woher und in welchem Zusammenhang 
dieser Pointer entstanden ist. Für sie ist das einfach nur eine Adresse 
im Speicher, an der sie die Bytes vorfindet, die einen int bilden.
Der Fall 'ein Array wird übergeben, in dem man die Startadresse des 
Arrays übergibt', ist ein Sonderfall, der auf einer Konvention, einer 
Vereinbarung zwischen Funktion und Aufrufer, beruht, für die der 
Programmierer verantwortlich ist. Die Funktion tut so, als ob die 
Adresse die Startadresse eines Arrays wäre. Sie tut das deswegen, weil 
du als Progammierer weißt, dass du die Funktion so benutzen willst und 
du daher (als Programmierer) sicherstellst, dass alle Aufrufe auch in 
dieser Form erfolgen. Aber das ist nur eine Konvention, für deren 
Einhaltung der Programmierer verantwortlich ist. Weder beim Aufruf noch 
in der Funktion gibt es eine Möglichkeit, diesen Sachverhalt zu 
forcieren oder zu überprüfen oder abzutesten. Die Funktion bekommt 
lediglich einen Pointer. Nicht mehr.