在C中,星号对已定义的变量意味着什么

时间:2015-02-18 16:52:44

标签: c

我看到了一些C代码,我不确定它是做什么的。

*dest++ = *src++;

遗憾的是我没有在上下文中使用此代码(我正在阅读一篇文章),但我认为src和dest是先前定义的。所以我知道变量定义上的星号表示指向该变量的内存位置的指针。但是星号在计算的上下文中意味着什么?

4 个答案:

答案 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)

以冗长的形式避免使用"解除引用"等字词,您可以将此行读作

  • src是一个包含内存位置地址的指针,它可能指向特定类型值数组中的元素。
  • * src是存储在该特定位置的值。
  • dest也是一个包含内存位置地址的指针,它也可能是特定类型值的数组中的元素(应该与src指向的类型兼容)。
  • * dest是存储在该特定位置的值。
  • 将src指向的内存位置的值分配给dest指向的内存位置;然后将src和dest指针值按其各自类型的大小递增,将两个指针推进到各自数组中的下一个元素。