Как создать массив char в c
Перейти к содержимому

Как создать массив char в c

  • автор:

Как создать массив char в c

Указатели сами по себе представляют значения, которые можно хранить в массивах. То есть в итоге получится массив указателей.

Массив указателей определяется одним из трех способов:

тип *имя_массива [размер]; тип *имя_массива [] = инициализатор; тип *имя_массива [размер] = инициализатор;

Используем все эти способы:

int array[] = ; int *p1[3]; int *p2[] = < &array[1], &array[2], &array[0] >; int *p3[3] = < &array[3], &array[1], &array[2] >;

Массив указателей p1 состоит из трех элементов, но он не инициализирован и является пустым.

Массивы p2 и p3 в качестве элементов хранят адреса на элементы массива a.

Выведем на конслоль значения, на которые ссылаются указатели:

#include int main(void) < int array[] = ; int *p[] = < &array[1], &array[2], &array[0] >; for(int i = 0; i < 3; i++) < printf("%d", *p[i]); >return 0; >

Здесь выражение *p[i] означает, что мы сначала обращаемся к i-тому адресу в массиве p, а потом применяет операцию разыменования для получения данных по этому адресу. В итоге на консоль будет выведено в строку:

Вместо *p[i] мы могли бы написать **(p+i) :

  • p+i — к адресу в указателе p прибавляем число i и таким образом перемещаемся по указателям в массиве p.
  • *(p+i) — разыменовываем i-тый указатель в массиве и в результате получаем адрес одного из элементов из массива array .
  • **(p+i) — получаем значение по полученному на предыдущем шаге адресу элемента из массива array.
#include int main(void) < int array[] = ; int *p[] = < &array[1], &array[2], &array[0] >; for(int i = 0; i < 3; i++) < printf("%d", **(p+i)); >return 0; >

Указатель и массив строк

Соответственно если указатель типа char можно представить в виде строки, то массив указателей типа char представляет собой массив строк:

#include int main(void) < char *fruit[] = ; for(int i=0; i < 5; i++) < printf("%s \n", fruit[i]); >return 0; >

Здесь массив указателей fruit хранит пять строк — фактически пять адресов, по которым размещены начальные символы каждой строки. Результат работы программы:

apricot apple banana lemon orange

Также мы могли бы написать:

#include int main(void) < char *fruit[] = ; for(int i=0; i < 5; i++) < printf("%s \n", *(fruit + i)); >return 0; >

Указатели на указатели

Кроме обычных указателей в языке Си мы можем создавать указатели на другие указатели. Если указатель хранит адрес переменной, то указатель на указатель хранит адрес указателя, на который он указывает. Такие ситуации еще называются многоуровневой адресацией.

int **ptr;

Переменная ptr представляет указатель на указатель на объект типа int . Две звездочки в определении указателя говорят о том, что мы имеем дело с двухуровневой адресацией. Например:

#include int main(void) < int x = 22; int *px = &x; // указатель px хранит адрес переменной x int **ppx = &px; // указатель ppx хранит адрес указателя px printf("Address of px: %p \n", (void *)ppx); printf("Address of x: %p \n", (void *)*ppx); printf("Value of x: %d \n", **ppx); return 0; >

Здесь указатель ppx хранит адрес указателя px . Поэтому через выражение *ppx можно получить значение, которое хранится в указателе px — адрес переменной x . А через выражение **ppx можно получить значение по адресу из px , то есть значение переменной x .

двухуровневая адресация и указатель на указатель в языке программирования Си

Как заполнить массив char

strcpy(), если у вас там char[]. Либо объявляйте как std::string и тогда оператор = будет работать.

6 окт 2017 в 9:23

@Abyx видимо, студийное расширение. Кол-во дополнительных сигнатур main определяется реализацией.

7 окт 2017 в 13:44

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

strcpy(a->fio,"sdfsdf"); 
strcpy_s(a->fio,50,"sdfsdf"); // В стиле С 

или (правда, не уверен в стандартности. но в VC++2015 есть):

strcpy_s(a->fio,"sdfsdf"); // В стиле С++, если передаете не указатель, а именно массив 

А еще лучше, раз уж у вас C++ —

struct spisok < string fio; int ng; >; void fillstr(spisok *a) < a->fio="sdfsdf"; a->ng = 624402; > 

Как объявить char массив

Author24 — интернет-сервис помощи студентам

Т.е. если инициализировать при объявлении — то все работает, иначе выскакивает ошибка.

Что я не так делаю? Как присваивать строку char-массиву?

Еще непонимаю, как обстоят дела с двумерными char массивами. Необходимо следующее: в каждую ячейку класть букву, например, «р».

Как это правильно сделать:

table[1][2] = "p";

94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Что такое тип *char и как объявить переменную такого типа?
"Записи в линейном списке содержат ключевое поле типа *char(строка символов).", подскажите, что за.

Объявить массив mb как массив литерных указателей без указания количества элементов
Помогите решить такую задачу: Объявить массив mb как массив литерных указателей без указания.

Объявить массив rs из 5 строк как двумерный символьный массив
Объявить массив rs из 5 строк как двумерный символьный массив. Инициализировать rs значениями “un”.

Регистрация: 28.09.2012
Сообщений: 39

1 2 3
char table[40]; strcpy(table,"hello");

99 / 39 / 12
Регистрация: 30.01.2011
Сообщений: 129
вы путаете символы и строки, в Си строки обозначаются «str», а символы как ‘s’,’t’,’r’

char table[40] = "hello";

так Вы создаете массив переменных типа char из 40 элементов и присваиваете первому элементу с индексом 0 указатель на строку «hello».

table[40] = "hello"; /* ошибка */

так вы пытаетесь присвоить 40-му элементу массива table[] указатель на строку «hello», что разумеется не сработает. в случае с Си необходимо делать так:

char charTable[40] = {'h','e','l','l','o'};

тогда в памяти будет так [h] [e] [l] [l] [o] [нуль][нуль][нуль] и т.д.;
а если делать так

char strTable[40] = {"hello","from","hell"};

то в памяти будет так [указатель на строку «hello»] [указатель на строку «from»] [указатель на строку «hell»][нуль]

Регистрация: 19.02.2013
Сообщений: 77

Так более менее проясняется.

Как в двухмерный массив положить символ?

Допустим, 3 на 3 массив. На примере, крестиков-ноликов, пусть имеются два символа — x и o, думаю дальше понятно.

Как правильно вывести массив (char)?

Нужно вывести массив из 20ти q. Но он вместо этого выводит: qqqqqqqqqqqqqqqqqqqqММММT?HЎhэУ . Как это исправить?

#include "pch.h" #include #include using namespace std; int main(int argc, const char * argv[]) < setlocale(LC_CTYPE, "rus"); char tt[20] = < 'q', 'q', 'q', 'q', 'q', 'q', 'q', 'q', 'q', 'q', 'q', 'q', 'q', 'q', 'q', 'q', 'q', 'q', 'q', 'q' >; cout

Отслеживать

13.8k 12 12 золотых знаков 44 44 серебряных знака 77 77 бронзовых знаков

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *