最近,我一直在学习C和指针。
在Stephen G. Kochan撰写的“C编程”一书中,我遇到了一个例子,我很难完全理解它。
要使用指针将字符串from
复制到字符串to
,示例表明:
void copyString (char *to, char *from) {
while ( *from )
*to++ = *from++;
*to = '\0';
}
据我了解,*from++
是*from
的后增量;因此*to++
的值应仅为*from
。
例如,如果
`*from` is in the position 1.
`*from++` is in position 2
`*to++` in position 2,
但是:*from++ = *to++
应该将*from
的值返回为*to
位置1,而不是2。
编译器说它的位置2,该书也说它的位置2.
我在这里有点困惑。你对这个案子有什么可行的解释吗?
答案 0 :(得分:5)
使用postfix ++
一元运算符时,在计算操作数的值后对增量进行排序。所以表达式相当于:
*to = *from;
to++ ;
from++ ;
在您的示例中:*to++ = *from++;
,获取*to
和*from
的值,然后将*from
的值分配给*to
,然后指针递增。
答案 1 :(得分:1)
*to++ = *from++;
to
和from
都有后期增量。
您可以阅读,
*from
的内容复制到*to
to
和from
。评估后缀运算符,并在赋值运算符=
的求值完成后执行递增(递减)操作。因此,首先复制值,然后两个指针都递增。
答案 2 :(得分:0)
作为之前答案的补充。
在C中,后缀增量++
的优先级高于解除引用运算符*
,这意味着* ptr ++相当于*(ptr ++)。检查this以获取有关C的运算符优先级的更多信息。