gpt4 book ai didi

c - 取消引用指针的后增量?

转载 作者:太空狗 更新时间:2023-10-29 16:18:17 25 4
gpt4 key购买 nike

试图理解 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 和 C++ 变得如此有趣的小陷阱之一。如果你想弯曲你的大脑,弄清楚这个:

while (*dst++ = *src++) ;

这是一个字符串副本。指针不断递增,直到复制了一个值为零的字符。一旦您知道这个技巧为何有效,您将永远不会忘记++ 是如何再次处理指针的。

附言您始终可以使用括号覆盖运算符顺序。以下将增加指向的值,而不是指针本身:

(*our_var_ptr)++;

关于c - 取消引用指针的后增量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/859770/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com