[英]What does “return p ? memcpy(p, s, len) : NULL;” mean?
在下面的代码中,“ return p?memcpy(p,s,len):NULL; ”是什么意思? (更一般而言,条件运算符a ? b : c
?)
char * strdup(const char * s)
{
size_t len = 1+strlen(s);
char *p = malloc(len);
return p ? memcpy(p, s, len) : NULL;
}
该语法称为三元运算符,您可以将其视为简化的if语句。 return p ? memcpy(p, s, len) : NULL;
是相同的:
if(p)
return memcpy(p, s, len);
else
return NULL;
memcpy()
函数返回一个指向dest的指针,这是memcpy的第一个参数,在您的情况下为p
。 因此,如果p
值不同于0(指针不为NULL),则返回该指针。 否则,返回NULL。
这意味着执行并返回memcpy(p, s, len)
,除非p==0
。 如果p==0
,它将返回NULL
,并且不执行memcpy(p, s, len)
。
阅读https://en.wikipedia.org/wiki/%3F:#C了解更多信息。
同样,为了解释一下http://man7.org/linux/man-pages/man3/memcpy.3.html:memcpy ()函数将len个字节从存储区p复制到存储区s。 存储区域不得重叠。
也就是说,如果我们有以下记忆:
p s
[][1][2][3][][][4][5][6][]
和len == 3,那么当调用memcpy时,我们得到:
p s
[][1][2][3][][][1][2][3][]
最后,函数返回的值是在表达式中使用该函数时所求值的值。 如果foo()
返回5,则print(foo());
打印5。
这是C语言中的三元运算符。
p ? memcpy(p, s, len) : NULL;
这意味着,如果第一个条件为true,即p
则返回memcpy(p, s, len)
的值,否则返回NULL
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.