簡體   English   中英

以下代碼在C中做什么?

[英]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;
}

這兩種情況將生成完全相同的機器代碼

這主要取決於ij是什么。 一種情況如下。

假設ij是指向字符串的兩個指針,則ij的值將同時增加,並將*j的值分配為*i ,每當j的值變為0\\0 ,循環將將0分配給* i后退出。

顯然,這可以用於將j的內容復制到i

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM