Вы хотите получить доступ к char
из char*
, просто используйте оператор []
, как массивы.
char *pointer = "Hello";
printf("%s", pointer); // ok
printf("%s", &pointer[0]); // wrong way of accessing specific element (it is same as the base address.., thus %s prints the whole thing)
Вместо этого вы получаете доступ к адресу первого элемента char*
или строковый литерал .. почему!
printf("%c", pointer[0]); // use this one
Точно так же, как массивы, получить доступ к необходимому элементу.
Однако, чтобы получить его лучше, обратите внимание здесь:
#include <stdio.h>
int main() {
char *pointer = "Hello";
printf("%s\n\n", pointer); // ok
printf("%c", pointer[0]);
printf("%p == %p\n", (void *)&pointer[0],(void *)pointer);
// cast to void * to avoid undefined behavior
// pointed out by @ex nihilo
printf("%p", pointer+1);
return 0;
}
Вывод:
Hello
H0x55da21577004 == 0x55da21577004
0x55da21577005
, как вы можете видеть, pointer
содержит адрес первого элемента: &pointer[0]
, таким образом, вы получите тот же вывод.