Я должен явно бросить malloc () возвращаемое значение? [дубликат]

для проверки, содержит ли строка числа !!

function ContainsNumbers($String){
    return preg_match('/\\d/', $String) > 0;
}
52
задан Kirill Kobelev 26 June 2012 в 21:31
поделиться

4 ответа

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

33
ответ дан 7 November 2019 в 09:21
поделиться

Если вам нравится мышление «не повторяйся», должно быть привлекательно то, что вам не нужно повторять имя типа из объявления переменной в вызове malloc () . Потому что, как отметили люди, вы не делаете: указатели преобразуются в и из void * без потерь, за исключением указателей на функции.

Кроме того, в этой заметке вам не нужно повторить себя с использованием sizeof либо. Ваш второй пример при выделении структуры можно записать так:

struct node *temp;
temp = malloc(sizeof *temp);

Что, по моему не столь скромному мнению, является лучшим способом.

Избегание повторений сокращает количество написанных вами вещей, что, в свою очередь, снижает риск того, что что-то из этого неверны.

Обратите внимание на звездочку в аргументе sizeof , это означает «размер объекта, на который указывает этот указатель», который, конечно, совпадает с «размером типа ] struct node ", но без повторения имени типа. Это потому, что sizeof вычисляет (во время компиляции!) Размер выражения, которое является его аргументом. Для этого случая. Так же, как sizeof 3 вычисляет размер выражения типа int , sizeof * temp вычисляет размер экземпляра struct node .

Конечно,

51
ответ дан 7 November 2019 в 09:21
поделиться

C неявно выполняет приведение из и в void * , поэтому приведение будет выполнено автоматически. В C ++ только преобразование в void * будет выполняться неявно, для другого направления требуется явное приведение.

10
ответ дан 7 November 2019 в 09:21
поделиться

В C ++ вы должны явно использовать приведение типов, но на самом деле это просто язык, говорящий вам за это.
В c нет необходимости в преобразовании, память - это просто память - мне нужно будет выполнить поиск, чтобы узнать, требует ли это последний стандарт C.

3
ответ дан 7 November 2019 в 09:21
поделиться
Другие вопросы по тегам:

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