long cread(long *xp) {
return (xp? *xp : 0);
}
является действительным , и это очень распространенный метод.Выражение pointer_name
может быть преобразовано в bool
и будет false
, если pointer_name == nullptr
, и true
, если pointer_name != nullptr
.Это означает, что для приведенного выше кода *xp
происходит только в том случае, если у вас нет нулевого указателя.
int cread_alt2(long *xp){
long tem = 0;
if(xp != NULL){
tem = *xp;
}
return tem;
}
Делает то же самое, это гораздо более многословно.Таким образом, единственный код, который на самом деле недействителен - это cread_alt
, который выполняет разыменование xp
без предварительной проверки, является ли он нулевым или нет.