难以理解指针操作
Having trouble understanding pointer operations
我写的时候不能完全理解语言的作用
*(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]
两个表达式是等价的。
后缀递增运算符 ++
的优先级高于解引用运算符 *
。结果 *(t++)
和 *t++
做同样的事情。即,指针 t
递增,递增前 t
的原始值被取消引用。
我写的时候不能完全理解语言的作用
*(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]
两个表达式是等价的。
后缀递增运算符 ++
的优先级高于解引用运算符 *
。结果 *(t++)
和 *t++
做同样的事情。即,指针 t
递增,递增前 t
的原始值被取消引用。