首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >“返回p? memcpy(p,s,len):NULL;”是什么意思?

“返回p? memcpy(p,s,len):NULL;”是什么意思?
EN

Stack Overflow用户
提问于 2014-07-29 18:10:54
回答 3查看 1.3K关注 0票数 0

在下面的代码中,返回p? memcpy(p,s,len):NULL是什么意思?(更广泛地说,条件运算符a ? b : c是什么?)

代码语言:javascript
运行
复制
char * strdup(const char * s)
{
  size_t len = 1+strlen(s);
  char *p = malloc(len);

  return p ? memcpy(p, s, len) : NULL;
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-07-29 18:13:31

它意味着执行并返回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复制到内存区域的。内存区域不能重叠。

也就是说,如果我们有以下记忆:

代码语言:javascript
运行
复制
   p            s
[][1][2][3][][][4][5][6][]

和len == 3,那么当调用memcpy时,我们得到:

代码语言:javascript
运行
复制
   p            s
[][1][2][3][][][1][2][3][]

最后,函数返回的值是它计算出来的值,如果在表达式中使用它;如果foo()返回5,则print(foo());打印5。

票数 5
EN

Stack Overflow用户

发布于 2014-07-29 18:13:51

这个语法被称为三元操作符,您可以认为它是简化的if语句。return p ? memcpy(p, s, len) : NULL;与以下内容相同:

代码语言:javascript
运行
复制
if(p)
    return memcpy(p, s, len);
else
    return NULL;

memcpy()函数返回一个指向dest的指针,这是memcpy的第一个参数,在您的例子中,这是p。因此,如果p的值与0不同(指针不是NULL),则返回该指针。否则,返回NULL。

票数 6
EN

Stack Overflow用户

发布于 2014-07-29 18:12:08

这是C中的一个三元算子。

代码语言:javascript
运行
复制
p ? memcpy(p, s, len) : NULL;

这意味着,如果第一个条件为真,即p,则返回memcpy(p, s, len) of的值,返回NULL

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25022164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档