Как создать двумерный массив строк переменного размера, передав переменную

Если вы исключаете неподписанные типы, есть упорядоченная иерархия: подписанный символ, короткий, int, long, long long, float, double, long double. Во-первых, все, что приходит перед int в приведенном выше, будет преобразовано в int. Затем, в двоичной операции, более низкий ранжированный тип будет преобразован в более высокий, и результаты будут типом высшего. (Вы заметите, что из иерархии, когда задействуются плавающая точка и интегральный тип, интегральный тип будет преобразован в тип с плавающей точкой.)

Unsigned усложняет ситуацию: он возмущает ранжирование и части ранжирования становятся определяемыми. Из-за этого лучше не смешивать подписанные и unsigned в одном выражении. (Большинство экспертов на C ++, похоже, избегают беззнакового, если не задействованы побитовые операции. То есть, по крайней мере, то, что рекомендует Stroustrup.)

1
задан alk 18 January 2019 в 10:13
поделиться

1 ответ

Я хочу использовать seq_cnt, чтобы объявить фактический размер tmp1

Do

char (*tmp1)[5+1] = malloc(seq_cnt * sizeof *tmp1);

Обновить информацию о трех различных применениях звездочки [114 ] в C.

  1. Типы / определения переменных

    Здесь

    char (*tmp1)[5+1]
    

    звездочка используется для определения указателя, указателя на массив char[5+1].

    Обратите внимание, что круглые скобки являются обязательными, поскольку char *tmp[5+1] определит массив из 6 указателей на char.

  2. Indirection (или разыменование) оператора

    Здесь

    sizeof *tmp1
    

    звездочка используется, чтобы сказать компилятору не принимать размер tmp1, который будет размером указателя, но размер того, на что указывает tmp1, а именно char[5+1].

    В качестве альтернативы можно написать sizeof (char[5+1]). Обратите внимание, что скобки не относятся к sizeof, так как это не функция, а оператор.

  3. Оператор умножения

    Здесь

    ]
    seq_cnt * sizeof ...
    

    звездочка используется для обозначения обычного умножения, а именно для вычисления произведения seq_cnt и размера чего-либо.

Таким образом, в целом верхний оператор выделяет seg_cnt раз байтов, которые нужны char[5+1], и назначает адрес 1-го байта фрагмента, выделенного для tmp1, заставляет его указывать на достаточно памяти для хранения seq_cnt массив char[5+1].

0
ответ дан alk 18 January 2019 в 10:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: