【发布时间】:2010-10-25 23:27:15
【问题描述】:
试图理解 C 中指针的行为,我对以下内容感到有些惊讶(示例代码如下):
#include <stdio.h>
void add_one_v1(int *our_var_ptr)
{
*our_var_ptr = *our_var_ptr +1;
}
void add_one_v2(int *our_var_ptr)
{
*our_var_ptr++;
}
int main()
{
int testvar;
testvar = 63;
add_one_v1(&(testvar)); /* Try first version of the function */
printf("%d\n", testvar); /* Prints out 64 */
printf("@ %p\n\n", &(testvar));
testvar = 63;
add_one_v2(&(testvar)); /* Try first version of the function */
printf("%d\n", testvar); /* Prints 63 ? */
printf("@ %p\n", &(testvar)); /* Address remains identical */
}
输出:
64
@ 0xbf84c6b0
63
@ 0xbf84c6b0
第二个函数 (add_one_v2) 中的 *our_var_ptr++ 语句究竟是做什么的,因为它显然与 *our_var_ptr = *our_var_ptr +1 不同?
【问题讨论】:
标签: c pointers operator-precedence