c - 难以理解指针操作

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

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

*(t++)

*t++

什么时候t是指针?

最佳答案

这两个表达式

*(t++)

*t++

由于运算符的优先级,它们是等价的。

所以后缀运算符++的优先级高于一元运算符*。

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

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

2 The result of the postfix ++ operator is the value of the operand. As a side effect, the value of the operand object is incremented (that is, the value 1 of the appropriate type is added to it)....

如果你有这样的指针,请考虑由于指针运算

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]

关于c - 难以理解指针操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49694028/

相关文章:

java - 与 while 循环 java 一起使用的未知运算符 [冒号]

r - 运算符优先级是否解释了这些涉及数字与否定逻辑的乘法的表达式的差异?

c - 从文件的特定部分读取 PIC32MX

c - 在 C 中如何使用大小写将枚举转换为字符串?

python - 要覆盖的最小比较运算符集

Java 优先级 - 转换和按位运算符

c++ - C/C++ 表达式运算符优先级的括号计算器

c++ - getopt加入参数

c - 如果一个字符串是其他字符串的旋转。所有测试用例未运行

没有 else 的 Ruby 三元运算符