gpt4 book ai didi

c - 如何增加取消引用的双指针?

转载 作者:太空狗 更新时间:2023-10-29 14:51:58 28 4
gpt4 key购买 nike

在我通常使用的代码中:

#include <stdlib.h>

void dref1(char **blah)
{
(*blah)[0] = 'a';
(*blah)[1] = 'z';
(*blah)[2] = 0x00;
}

/* or */

void dref2(char **blah)
{
char *p = *blah;

*p++ = 'w';
*p++ = 't';
*p = 0x00;
}


int main(void)
{
char *buf = malloc(3);

dref1(&buf);
puts(buf);
dref2(&buf);
puts(buf);
free(buf);

return 0;
}

我的问题是是否可能/如何直接取消引用和递增指针:

**blah = 'q';       /* OK as (*blah)[0] ? */
(*blah)++; /* Why not this? */
*((*blah)++) = 'w'; /* ;or. */
...

最佳答案

我不知道你的真正意图是什么,但在我看来你需要了解 *p++(*p)++ 之间的区别作为表达式。

第一个表达式取消对指针的引用并使指针本身前进,而不是指向的值。

第二个表达式取消引用指针并通过应用后缀 ++ 运算符修改指向的值。指向的值是指针还是简单的整数并不重要。

这与一元 * 运算符和后缀 ++ 运算符的优先级有关。如果没有括号,则首先应用 ++ 运算符,其结果用作 * 运算符的操作数。

编辑:

假设 blahchar ** 类型,下面列出了可能的操作以及每个操作的作用:

  • 显然,blah 产生一个类型为 char ** 的值;
  • *blah 产生 char *;
  • **blah 产生 char
  • *(*blah)++ 解引用 blah 得到一个 char *,然后是 *p++ 比喻来了。
  • **blah++ 两次取消引用 blah 以获得指向的值,然后递增 blah 指针。
  • (**blah)++ 两次取消引用 blah 指针,然后 (*p)++ 类比来了。

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

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