无法理解指针操作

时间:2018-04-06 13:32:50

标签: c operators operator-precedence unary-operator postfix-operator

我不能完全理解我写作时语言的作用

*(t++)

*t++

t是指针时?

2 个答案:

答案 0 :(得分:4)

这两个表达

*(t++)

*t++
由于运算符优先级,

是等效的。

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

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

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

  

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]

答案 1 :(得分:2)

两个表达都是等价的。

后缀增量运算符++的优先级高于解除引用运算符*。因此,*(t++)*t++执行相同的操作。即,指针t递增,并且在递增之前t的原始值被解除引用。