gpt4 book ai didi

c - * 根据其使用上下文是否有不同的含义?

转载 作者:行者123 更新时间:2023-11-30 18:44:43 25 4
gpt4 key购买 nike

我是 C 新手,对 * 的两种不同用法感到困惑。我知道 * 的使用称为解引用,用于检索指针指向的值。

int num = 20;
int *ip;
ip = #

print("This is the pointer's address: %p\n", ip); // bffd8b3c
print("This is the value of the pointer: %d\n", *ip); // 20

我的想法是,* 就像一个运算符,当它应用于指针时,会在 print 语句的上下文中给出值

在其他地方,我见过 * 按以下方式使用:

void someFunction(int **IP){

int *anotherIP = NULL;
*IP = anotherIP;

}

如果我在这里用同样的思路,*IP应该是IP指向的值。但似乎不是这样的用法。相反,它将本地指针分配给 IP 指向的指针。

更正:该函数正在将 anotherIP 分配给指向 IP 的指针(即 *IP); IP(指向指针的指针)在传递给函数时被取消引用两次 (**IP)。

我的问题是: * 的含义是否依赖于上下文?如果是,在常用情况下我应该注意哪些上下文?如果不是,我如何理解上面的例子?

此外,在上面的函数中使用双星号的理由是什么?我发现这在函数中经常使用。

谢谢!

最佳答案

首先,在 C 中,变量的声明应该看起来像它的访问。这意味着指向 int 指针的指针的实际值是 int 值,因此您可以使用 int value = **IP 访问它。

您经常在函数中看到双指针,因为它允许您为返回的值分配空间。

单个指针将按值传递给函数,如果您在函数中更改它,调用者将看不到更改。

关于c - * 根据其使用上下文是否有不同的含义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56855176/

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