Используя указатель на массив char, можно получить доступ к значениям в этом массиве?

Я создал ptr как указатель на массив из 5 символов.

char (*ptr)[5];

присвоил ему адрес массива char.

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

using pointer ptr Можно ли получить доступ к значениям char в этом массиве?

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

Он не печатает значение.

В моем понимании ptr будет содержать базовый адрес массива, но он фактически указывает на память, необходимую для полного массива (например, 5 символов). Таким образом, когда ptr увеличивается, он движется вперед на sizeof(char)*5 байт. Невозможно ли получить доступ к значениям массива с помощью этого указателя на массив?

Ответы

Ответ 1

Когда вы хотите получить доступ к элементу, вы должны сначала разыменовать свой указатель, а затем проиндексировать нужный элемент (который также является деревом). то есть вам нужно:

printf("\nvalue:%c", (*ptr)[0]);, что совпадает с *((*ptr)+0)

Обратите внимание, что работа с указателем на массивы не очень распространена в C. вместо этого, просто используйте указатель на первый элемент в массиве и либо обрабатывайте длину как отдельный элемент, либо поместите значение senitel на конец массива, поэтому можно узнать, когда заканчивается массив, например

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

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

Ответ 2

Большинство респондентов даже не знают, что такое указатель на массив...

Проблема в том, что вы выполняете рисование с помощью указателя массива: ptr + 1 будет означать "прыгать на 5 байт вперед, поскольку точки ptr в массиве 5 байтов".

Сделайте так:

#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]);
  }
}

Возьмите содержимое указателя массива, и вы получите массив. Поэтому они работают так же, как любой указатель на C.

Ответ 3

Ваш должен создать ptr следующим образом:

char *ptr;

Вы создали ptr как массив указателей на символы. Вышеописанное создает единственный указатель на char.

Изменить: полный код должен быть:

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

Ответ 4

ваш вопрос, очень простой, поэтому я пытаюсь дать его с моим процессом, поскольку массив указателя очень отличается в c-массиве программирования, поэтому я даю следующий код для указателя, выражения, надеюсь, что он будет полезен:

    #include<stdio.h>
    int main()
     {


char arr[5]={'a','c','i','h','f'};
int i;
char *p;
p=arr;

for(i=0;i<5;i++)
{
    printf("%c\n",*(p+i));
}
   return 0;
  }

это выведет ваш массив char;