Что указывает на John в примере?
Смотрите тут char* gg[] = {"John", "Maria"}; я хочу понять, если это массив указателей на строку то что указывает на John? Может быть на John указывает адрес её первого символа т.е J и gg[i] хранит адрес символа J, который указывает на строку John?
Ответы (1 шт):
Автор решения: Stanislav Volodarskiy
→ Ссылка
Во первых, вы написали нехороший код. Литерал "John" имеет тип const char*, ему не место в массиве char*. Компиляторы C допускают такой код только из соображений обратной совместимости:
#include <stdio.h>
int main() {
char* gg[] = {"John", "Maria"};
}
$ gcc -Wwrite-strings example.c temp.c: In function ‘main’: temp.c:8:19: warning: initialization discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers] 8 | char* gg[] = {"John", "Maria"}; | ^~~~~~ temp.c:8:27: warning: initialization discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers] 8 | char* gg[] = {"John", "Maria"}; | ^~~~~~~
Под капотом компилятор выделяет память под два массива символов. Они неизменямые:
const char john_array[5] = {'J', 'o', 'h', 'n', '\0'};
const char maria_array[6] = {'M', 'a', 'r', 'i', 'a', '\0'};
Каждому массиву сопоставляется указатель на первый символ массива:
const char *john_pointer = &john_array[0];
const char *maria_pointer = &maria_array[0];
Из указателей составляется массив gg:
const char* gg[] = {john_pointer, maria_pointer };