【问题标题】:Having trouble understanding pointer operations无法理解指针操作
【发布时间】:2018-04-06 13:32:49
【问题描述】:

我在写作时无法完全理解语言的作用

*(t++)

*t++

t 什么时候是指针?

【问题讨论】:

  • 我可能是错的,但这两种形式应该具有完全相同的行为。

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


【解决方案1】:

这两个表达式

*(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】:

    这两个表达式是等价的。

    后缀递增运算符++ 的优先级高于取消引用运算符*。结果*(t++)*t++ 做同样的事情。即指针t递增,t在递增前的原始值被解引用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-09
      • 2017-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多