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";