i++、++i 的區別

在準備字符串相關的編程題練手的時候,編程過程中發現了一個小問題
代碼一:

char *mystrcpy(char *str, const char* src)
{
    if(str == NULL || src == NULL)
        return NULL;
    char *addres = str;
    
    while(*src != '\0')   //[1]
        *str++ = *src++;
    return addres;
}

代碼二:

char *mystrcpy(char *str, const char* src)
{
    if(str == NULL || src == NULL)
        return NULL;
    char *addres = str;

    while((*str++ = *src++) != '\0');   //[2]
    return addres;
}

這兩個都是字符串拷貝函數,兩個代碼是有微小差異的!

int main()
{
    const char *src = "world";
    char str[] = "helpo world";
    char * p = mystrcpy(str, src);
    show(p);
    return 0;
}

差異在代碼有註釋!

while(while((*str++ = *src++) != '\0'); 
看不懂這行代碼,可以先看個簡單的好描述的代碼
 

int i = 0;
while(i++ < 10);
printf("%d\n",i);

這個代碼輸出i爲11, i++沒有出又括號前i的值是沒有加一的,出了右括號i的值纔會進行加一操作,可以在ide中或者用gdb調試一下

字符串拷貝函數就是這樣,while((*str++ = *src++) != '\0');   這行代碼將'\0' 拷貝給str,出了循環的右括號後str進行加一,循環結束。

 

++i,則是加加後直接把值賦給i

堅持✊

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章