我是用一個char *數組部分字符串複製到其他的char *數組,我在想,如果這樣做正確遞增指針?
do {
*pntr1++ = *pntr2++
} while (*pntr2 != '\0');
是一回事
do
{
*indPtr = *wordPtr;
indPtr++;
wordPtr++;
} while (*wordPtr != '\0');
或將我最終跳過使用第一種方法的索引?
我是用一個char *數組部分字符串複製到其他的char *數組,我在想,如果這樣做正確遞增指針?
do {
*pntr1++ = *pntr2++
} while (*pntr2 != '\0');
是一回事
do
{
*indPtr = *wordPtr;
indPtr++;
wordPtr++;
} while (*wordPtr != '\0');
或將我最終跳過使用第一種方法的索引?
是的,這兩者是等價的。後增加意味着之前的值在該表達式中使用了增量,並且該增量在表達式結尾處的序列點之前某個時間發生(或者,在C++術語中,「在下一個表達式之前被排序)。
因此,在這兩種情況下,分配使用他們增加前的指針的值,並且比較\0
使用它已經增加後的指針的值。
如果您希望複製一個字符串,那會導致問題:至少在您顯示的代碼中,終止(假定)字符串的\0
不會被複制(儘管您可以添加代碼之後終止目標字符串)。
運營商++
使用類似a++
首先返回值a
,然後增加它。
所以,代碼
*a++ = *b++
和
*a = *b;
a++;
b++;
是等同物。
你試過了嗎?發生了什麼? –
@RogerRowland在可能未定義的行爲的情況下,依靠某個特定實例中的「發生了什麼」可能是一個糟糕的主意。 –
是的,兩者都是一樣的:我更喜歡'while(* pntr1 ++ = * pntr2 ++);' –