我不完全理解這個,有人可以幫我評估下面的表達式嗎?如果信息有**
且長度只有*
,則使用*()
我們是否解除引用*message
和length
?任何幫助將非常感激。C如何評估這個表達式? C指針
bool func(char** message, size_t* length)
{
*(*message + *length) = '\0';
}
我不完全理解這個,有人可以幫我評估下面的表達式嗎?如果信息有**
且長度只有*
,則使用*()
我們是否解除引用*message
和length
?任何幫助將非常感激。C如何評估這個表達式? C指針
bool func(char** message, size_t* length)
{
*(*message + *length) = '\0';
}
*(a + b)
是寫a[b]
的另一種方式。上面的語句等價於
(*message)[*length] = '\0';
*message
是char*
字符串,*length
是一個大小。它將索引*length
中的字符設置爲NUL。
指針的額外層沒有特別的原因。這將是更垂直於除去從每個參數的一個*
和具有的功能是:
bool func(char* message, size_t length)
{
*(message + length) = '\0';
}
或者,換句話說,
bool func(char* message, size_t length)
{
message[length] = '\0';
}
部分的括號內計算一個地址,然後將NUL被存儲在該地址。
讓我們來解開它
char *ptr = *message; // derefernce the pointer to pointer
size_t len = *length; // get the length by derefencing the pointer
char * new_ptr = ptr + len;
*new_ptr = '\0';
message
是一個指針的指針字節塊(實際上是一個字符串)。 length
是指向size_t(某種非負整數)的指針。表達被解碼如下:
*message
是一個指向字符串
*length
是一個數字,在該length
所指向的值,可能是字符串所需的長度,或者長度在該字符串將被截斷(從整個表達式行爲判斷)
*message + *length
是在aritmethic指針,指向某些位置是*length
字節遠離串的開始的指針
*(*message + *length)
正在解引用指針。這是我們指向的實際角色。
*(*message + *length) = '\0'
這是在該位置存儲一個NUL字節,因此終止字符串。
功能可以改寫爲本,以提高可讀性:
bool func(char** message, size_t* length)
{
size_t len = *length;
char *msg = *message;
msg[len] = '\0';
}