для проверки, содержит ли строка числа !!
function ContainsNumbers($String){
return preg_match('/\\d/', $String) > 0;
}
Пустой указатель в C может быть назначен любому указателю без явного приведения.
Если вам нравится мышление «не повторяйся», должно быть привлекательно то, что вам не нужно повторять имя типа из объявления переменной в вызове malloc ()
. Потому что, как отметили люди, вы не делаете: указатели преобразуются в и из void *
без потерь, за исключением указателей на функции.
Кроме того, в этой заметке вам не нужно повторить себя с использованием sizeof
либо. Ваш второй пример при выделении структуры можно записать так:
struct node *temp;
temp = malloc(sizeof *temp);
Что, по моему не столь скромному мнению, является лучшим способом.
Избегание повторений сокращает количество написанных вами вещей, что, в свою очередь, снижает риск того, что что-то из этого неверны.
Обратите внимание на звездочку в аргументе sizeof
, это означает «размер объекта, на который указывает этот указатель», который, конечно, совпадает с «размером типа ] struct node
", но без повторения имени типа. Это потому, что sizeof
вычисляет (во время компиляции!) Размер выражения, которое является его аргументом. Для этого случая. Так же, как sizeof 3
вычисляет размер выражения типа int
, sizeof * temp
вычисляет размер экземпляра struct node
.
Конечно,
C неявно выполняет приведение из и в void *
, поэтому приведение будет выполнено автоматически. В C ++ только преобразование в void *
будет выполняться неявно, для другого направления требуется явное приведение.
В C ++ вы должны явно использовать приведение типов, но на самом деле это просто язык, говорящий вам за это.
В c нет необходимости в преобразовании, память - это просто память - мне нужно будет выполнить поиск, чтобы узнать, требует ли это последний стандарт C.