【发布时间】:2018-04-06 13:32:49
【问题描述】:
我在写作时无法完全理解语言的作用
*(t++)
*t++
t 什么时候是指针?
【问题讨论】:
-
我可能是错的,但这两种形式应该具有完全相同的行为。
标签: c operators operator-precedence unary-operator postfix-operator
我在写作时无法完全理解语言的作用
*(t++)
*t++
t 什么时候是指针?
【问题讨论】:
标签: c operators operator-precedence unary-operator postfix-operator
这两个表达式
*(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]
【讨论】:
这两个表达式是等价的。
后缀递增运算符++ 的优先级高于取消引用运算符*。结果*(t++) 和*t++ 做同样的事情。即指针t递增,t在递增前的原始值被解引用。
【讨论】: