我看到了一些C代码,我不确定它是做什么的。
*dest++ = *src++;
遗憾的是我没有在上下文中使用此代码(我正在阅读一篇文章),但我认为src和dest是先前定义的。所以我知道变量定义上的星号表示指向该变量的内存位置的指针。但是星号在计算的上下文中意味着什么?
答案 0 :(得分:3)
对于像这样的操作,这是一个非常常见的上下文 * :
void strcpy(char *dest, const char *src) {
while (*dest++ = *src++)
;
}
这是C字符串复制算法的一种实现。每个表达式中的星号表示指针取消引用,即获取存储在指针指向的位置的值。
* 第二版K&R,第88页。
答案 1 :(得分:0)
易于理解的版本
void strcpy(char* dest, char* src)
{
while(*src != '\0') // While the src-character is not at the end of the string
{
*dest = *src; // Copy one character from the src buffer to the destination bufffer
src++; // Move the src to the next character
dest++; // Move the dest to the next character.
}
}
短版
void strcpy(char* dest, char* src)
{
while(*src) *dest++ = *src++;
}
答案 2 :(得分:0)
与C中的许多其他符号一样,星号具有多种含义,具体取决于上下文。在变量声明中,它表示变量是一个指针,在这样的表达式中使用它取消引用一个指针,即它获取指针所指向的值。
然后你有后缀增量运算符++
,它返回表达式的值,然后增加它,在这种情况下,它返回指针,然后增加指针。
那么,例如*src++
确实是指针src
得到它的值,然后增加指针(因此它指向内存中的下一个位置)。
对于整个表达式*dest++ = *src++
,它只是将src
指向的值复制到dest
指向的值,然后增加相应的指针。简而言之,它从src
复制到dest
。你很可能会在循环中看到这一点。
答案 3 :(得分:0)
以冗长的形式避免使用"解除引用"等字词,您可以将此行读作