Используя указатель на массив 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;