C 对指向字符串文字的指针进行算术运算。

C 对指向字符串文字的指针进行算术运算。,c,string,pointers,C,String,Pointers,为了 我在代码中有以下两条语句 char *p="abcd"; 第二个呢 ++*p; 这两种方法产生相同的结果,但是这两种方法的实现方式有什么不同吗?另外,请明确哪一种方法具有更高的优先级“+”或“*”。Thanx 请参考优先级表,优先级较高的运算符将首先计算 在您的例子中,您使用的前缀increment++,其优先级与差异运算符*相同。 因此,当两者在同一表达式中时,它的关联性应考虑为从右到左的 ++*p将相当于++(*p)指针先被遵从,然后值被递增 *++p; i、 e*p等于a,字符

为了

我在代码中有以下两条语句

char *p="abcd";
第二个呢

++*p;
这两种方法产生相同的结果,但是这两种方法的实现方式有什么不同吗?另外,请明确哪一种方法具有更高的优先级“+”或“*”。Thanx

请参考优先级表,优先级较高的运算符将首先计算

在您的例子中,您使用的前缀increment
++
,其优先级与差异运算符
*
相同。 因此,当两者在同一表达式中时,它的关联性应考虑为从右到左的

++*p将相当于++(*p)指针先被遵从,然后值被递增

*++p;
i、 e
*p
等于
a
,字符上的
++
将为您提供
b

*++p将等于*(++p)。指针先递增,然后再递减

i、 e
++p
将指向字符串中的
b
,然后
*
尊重将在位置2处为您提供b


更改您的输入字符串,您将得到不同的答案。得到的答案与对第一个字符的操作与对第二个字符的操作相同,这两条语句只是碰巧产生了相同的值,这是因为您初始化了
p
的特定字符串(并且因为编译器碰巧没有在内存中分配标记为只读的字符串)。请尝试字符串“blah”看看它们不会产生相同的结果。@Cheers-Sandhth.-Alf但为什么会产生相同的结果呢result@Bayant_singh:因为增加“a”的ASCII码(恰好是97)会产生“b”的ASCII码,即98,这恰好是您在数组(字符串)中作为第二项放置的值--另一个表达式生成第二项。。。
 char *p="abcd";