[英]what does the following code do in C?
我從某處看到了以下代碼:
while(*i++ = *j++)
{
}
但是這段代碼在做什么? 它是什么意思?
它將元素從名為j
的數組(或指向數組的指針)復制到名為i
元素。 這樣做直到找到一個等於零的值(來自j
)。
這是復制C樣式,以null終止的字符串的常見用法。 它也可以用來復制以前哨零結尾的整數數組。
如果可以預先知道j
的大小,則最好使用memcpy()
。 並且如果無法事先知道j
的大小,則代碼很可能是不安全的,因為也無法知道為i
分配的適當大小。
最有可能的是,如果i和j為char *,則它將以空終止的字符串j復制到以i開頭的內存中。 您可能要記住,i和j本身會發生變化( i += strlen(j)
),因此上面的代碼還會中斷指向字符串的指針。
它將j指向的數據復制到i指向的數組,並繼續直到復制了0值。 它可能用於復制以空值結尾的字符串。 為了更加聰明,您可以使用
while(*i++ = *j++);
* j ++取消刷新指針,增加其值。
* i ++ = * j ++將* j的舊值分配給* i,然后* i ++將該值遞增並保存以供下次使用
while(*i++ = *j++)
被執行。
如果i和j是char [],則
while(*i++ = *j++)
將字符從j []復制到i [],直到到達NULL字符。
除了其他答案, while(*i++ = *j++){}
是一種不太易讀,更緊湊和更危險的書寫方式
*i = *j;
while(*i != 0)
{
i++;
j++;
*i = *j;
}
這兩種情況將生成完全相同的機器代碼 。
這主要取決於i
和j
是什么。 一種情況如下。
假設i
和j
是指向字符串的兩個指針,則i
和j
的值將同時增加,並將*j
的值分配為*i
,每當j
的值變為0
即\\0
,循環將將0
分配給* i后退出。
顯然,這可以用於將j
的內容復制到i
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.