[英]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.