“*”在各种指针场景中是啥意思?

Posted

技术标签:

【中文标题】“*”在各种指针场景中是啥意思?【英文标题】:What does the "*" mean in various pointer scenarios?“*”在各种指针场景中是什么意思? 【发布时间】:2020-10-24 15:24:11 【问题描述】:

我知道 * 被广泛用作乘法运算符,但它可以用于更多用途。 例如:

int number = 5;                 
int* pointer = &number;

在这个例子中,一个 int 指针被声明并使用 * 语法定义到变量号的 RAM 地址值。现在,如果我们想显示变量“number”的 RAM 地址值 我们将不得不再次使用“*”。像这样:

int pointer_value = *pointer;

现在我们再次使用 * 语法,但在 int 变量“pointer_value”的定义中。这将显示RAM地址的值指向变量“number”的值。

现在我的问题是:“*”主要用于什么,我看到了很多这样的例子:

const char* word;

等等。等等。“*”可以用来混淆我的许多机会。谁能解释一下?

【问题讨论】:

取决于你在哪里使用它;在int pointer_value = *pointer; 的示例中,* 用于取消引用 指针。简而言之,上下文很重要。 【参考方案1】:

从语法上讲,声明是int *pointer,而不是int* pointer* 在声明和表达式中的含义基本相同。

在表达式中,*pointer 使用其内存地址引用某个对象。

int *pointer 之类的声明意味着*pointer 将引用int。由于*pointer 指的是int,这意味着pointer 是指向int 的指针。这将在here 和here 进一步解释。

在表达式中,当*作为一元运算符出现时(后面紧跟一个操作数,前面没有操作数),它是间接运算符,意思是使用操作数作为地址来引用对象那个地址。

* 作为二元运算符出现时(其前有一个操作数,后有一个操作数),它是乘法运算符。

【讨论】:

【参考方案2】:

这个“*”是星号,如果你想打印num的值你打印*pointer。 如果要打印到地址,则打印指针或 &num 打印 num 的地址。如果要打印地址指针,请打印 &pointer。

【讨论】:

以上是关于“*”在各种指针场景中是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

Go 中的“值语义”和“指针语义”是啥意思?

%[^\n] 在 scanf() 格式字符串中是啥意思

int **m,**s;是啥意思?

在C++种,关于指针的这两种表示有啥区别:double * a和double ** a?两个**是啥意思呢?

JAVA中文是啥意思

“值语义”和“指针语义”是啥意思?