取消引用运算符何时有用?[复制]

When is the dereferencing operator useful? [duplicate]

提问人:ScoutRr 提问时间:11/2/2023 最后编辑:chqrlieScoutRr 更新时间:11/2/2023 访问量:75

问:

我是一个新手 c-coder,所以这可能有一个非常简单的答案。我了解指针和取消引用运算符的功能,但我不确定它们何时真正有用?

基本示例:

  int x = 10;
  int *p;
  p = &x;
  printf(" x = %d", *p);
  printf(" x = %d", x);
    // both print out: x = 10

什么时候取消引用指针比直接寻址变量更有效?努力寻找好的例子(我能理解)在线自动取款机,我感谢任何帮助。

C 指针 运算符

评论

1赞 Eugene Sh. 11/2/2023
“什么时候取消引用指针比直接寻址变量更有效?”- 当您只能访问指针,而不能访问变量时。
0赞 Barmar 11/2/2023
指针的全部意义在于它们可以引用不同的变量。所以你不能直接使用这个变量。
0赞 Frankie_C 11/2/2023
如果你必须处理,即传递给一个函数、一个大型结构或任何大型对象,你可以简单地传递它的指针。动态创建对象时,您只有一个指针。等等......
0赞 John Bollinger 11/2/2023
简单的启发式方法:除非需要指针,否则不要使用指针。如果你没有看到需要,那么你没有就很好。
0赞 ikegami 11/2/2023
考虑没有 .然后,您必须使用 .例如,如果使用 分配内存,则不会有。那你为什么要这样做呢?原因太多了!也许您希望内存分配比分配内存的函数的调用更持久。也许您想分配可变的内存量。也许您想选择更改稍后分配的内存块的大小。等等等等。x*pxmalloc

答:

1赞 Barmar 11/2/2023 #1

指针通常用于需要根据动态条件指向不同变量的情况。

例如,这里有一个变量选择是随机的示例。

int x = 10;
int y = 20;
int *p;
if (rand() < 0.5) {
    p = &x;
} else {
    p = &y;
}
printf("Chosen value = %d", *p);
0赞 SoronelHaetir 11/2/2023 #2

在实际代码中,一元 * 运算符有用的时间是当您获得指向某项内容的指针到指针时。在这种情况下,通常需要显式取消引用第一级指针才能访问第二级指针(即使第二级是指向结构的指针,并且您使用 -> member-access 运算符)。

struct foo
{
  int x;
}
...
struct foo ** ptr = ...;
(*ptr)->x = 1;

请注意,“(*ptr)->x”中的括号是必需的,因为 -> 的优先级高于 *,因此如果没有它,将被解析为 *(ptr->x) = 1;并且类型检查失败。