代码之家  ›  专栏  ›  技术社区  ›  Francisco José Letterio

无法理解指针操作

  •  0
  • Francisco José Letterio  · 技术社区  · 8 年前

    我写东西的时候不能完全理解语言的功能

    *(t++)
    
    *t++
    

    什么时候 t 是指针吗?

    2 回复  |  直到 8 年前
        1
  •  4
  •   Vlad from Moscow    8 年前

    这两个表达式

    *(t++)
    
    *t++
    

    由于运算符的优先级,因此是等效的。

    因此,后缀运算符++的优先级高于一元运算符*。

    后缀运算符++的结果是递增之前其操作数的值。

    来自C标准(6.5.2.4后缀递增和递减运算符)

    2. 后缀++运算符的结果是操作数的值 。 作为副作用,操作数对象的值会递增(即 是,向其添加适当类型的值1)。。。。

    如果您有这样一个指针,请考虑由于指针算法

    T *p;
    

    哪里 T 是某种类型,然后在操作之后 p++ 指针本身的最终值按值递增 sizeof( T ) .对于类型 char sizeof( char ) 始终等于 1

    考虑以下演示程序。

    #include <stdio.h>
    
    int main(void) 
    {
        char *t = "AB";
    
        printf( "%c\n", *t++ );
        printf( "%c\n", *t );
    
        return 0;
    }
    

    其输出为

    A
    B
    

    您可以替换此语句

    printf( "%c\n", *t++ );
    

    对于本声明

    printf( "%c\n", *( t++ ) );
    

    你会得到同样的结果。

    实际上这个表达式

    *(t++)
    

    也相当于表达式

    t++[0]
    
        2
  •  2
  •   dbush    8 年前

    这两个表达式是等效的。

    后缀增量运算符 ++ 优先级高于取消引用运算符 * 因此 *(t++) *t++ 做同样的事情。即指针 t 的原始值 T 在递增之前取消引用。