wake-up-neo.net

Mit dem Zeiger auf das Char-Array kann auf die Werte in diesem Array zugegriffen werden.

Ich habe ptr als Zeiger auf ein Array von 5 Zeichen erstellt.

char (*ptr)[5];

ihm die Adresse eines Char-Arrays zugewiesen.

char arr[5] = {'a','b','c','d','e'};
ptr = &arr;

kann ich mit dem Zeiger ptr auf die Zeichenwerte in diesem Array zugreifen?

printf("\nvalue:%c", *(ptr+0));

Der Wert wird nicht gedruckt. 

In meinem Verständnis wird ptr die Basisadresse des Arrays enthalten, aber es zeigt tatsächlich auf den Speicher, der für das gesamte Array benötigt wird (d. H. 5 Zeichen). Wenn ptr inkrementiert wird, wird es um sizeof(char)*5 Bytes vorgerückt. Ist es nicht möglich, mit diesem Zeiger auf ein Array auf die Werte des Arrays zuzugreifen?

19
Pravi

Wenn Sie auf ein Element zugreifen möchten, müssen Sie zuerst den Zeiger dereferenzieren und dann das gewünschte Element indexieren (was auch dereferncing ist). d. h. Sie müssen Folgendes tun:

printf("\nvalue:%c", (*ptr)[0]);, das ist das gleiche wie *((*ptr)+0)

Beachten Sie, dass das Arbeiten mit einem Zeiger auf Arrays in C nicht üblich ist. Stattdessen verwenden Sie einfach einen Zeiger auf das erste Element in einem Array und behandeln entweder die Länge als separates Element oder platzieren einen Senitel-Wert am Ende des Array, so kann man lernen, wann das Array endet, z.

char arr[5] = {'a','b','c','d','e',0}; 
char *ptr = arr; //same as char *ptr = &arr[0]

printf("\nvalue:%c", ptr[0]);
18
nos

Die meisten Antwortenden scheinen nicht einmal zu wissen, was ein Arrayzeiger ist ...

Das Problem ist, dass Sie Zeigerarithmetik mit einem Arrayzeiger ausführen: ptr + 1 bedeutet "Springt um 5 Bytes vor, da ptr auf ein 5-Byte-Array zeigt".

Mach das stattdessen so:

#include <stdio.h>

int main()
{
  char (*ptr)[5];
  char arr[5] = {'a','b','c','d','e'};
  int i;

  ptr = &arr;
  for(i=0; i<5; i++)
  {
    printf("\nvalue: %c", (*ptr)[i]);
  }
}

Nehmen Sie den Inhalt von dem, auf den der Arrayzeiger zeigt, und Sie erhalten ein Array. Sie funktionieren also wie jeder Zeiger in C.

6
Lundin

Sie sollten ptr wie folgt erstellen:

char *ptr;

Sie haben ptr als Array von Zeigern auf Zeichen erstellt. Das Obige erstellt einen einzelnen Zeiger auf ein Zeichen.

Edit: vollständiger Code sollte sein:

char *ptr;
char arr[5] = {'a','b','c','d','e'};
ptr = arr;
printf("\nvalue:%c", *(ptr+0));
0
qbert220

Verwendung eines Zeigers vor einem Zeichenarray

Normalerweise wird das Character-Array verwendet, um einzelne Elemente, d. H. Jeweils 1 Byte, zu speichern

z.B:

char a[]={'a','b','c'};

wir können nicht mehrere Werte darin speichern.

durch Verwendung eines Zeigers vor dem Zeichenarray können wir die mehrdimensionalen Arrayelemente im Array speichern

d.h.

char *a[]={"one","two","three"};
printf("%s\n%s\n%s",a[0],a[1],a[2]);
0
Hemaraj Jupudi