Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
以指针作为函数参数的语法解释(C+;+;) 我不确定我是否可以问基本问题,但是我开始学习C++,不理解指针语法中的一个小东西。_C++_Syntax - Fatal编程技术网

以指针作为函数参数的语法解释(C+;+;) 我不确定我是否可以问基本问题,但是我开始学习C++,不理解指针语法中的一个小东西。

以指针作为函数参数的语法解释(C+;+;) 我不确定我是否可以问基本问题,但是我开始学习C++,不理解指针语法中的一个小东西。,c++,syntax,C++,Syntax,以下是我的代码示例: using namespace std; int randomname(int *x); int main(){ int a = 1; int *ab; ab = &a; randomname(&a); } int randomname(int *x){ *x = 9001; } 我的问题是关于*符号。为什么在ab=&a;行的主函数中;我不需要*,但在线*x=9001;我需要它吗?我认为这两个函

以下是我的代码示例:

using namespace std;

int randomname(int *x);

int main(){

    int a = 1;

    int *ab;

    ab = &a;

    randomname(&a);

}


int randomname(int *x){

    *x = 9001;

}

我的问题是关于*符号。为什么在ab=&a;行的主函数中;我不需要*,但在线*x=9001;我需要它吗?我认为这两个函数的语法应该相同,但事实并非如此。有人能解释一下原因吗?

星号
*
和符号
&
的含义都会随着上下文的不同而变化。它们在表达和声明中的含义不同:

  • 在声明中使用
    *
    时,它指定一个指针
  • 在声明中使用
    &
    时,它指定一个引用
  • 当在表达式中使用
    *
    时,它会对其操作数执行指针解引用
  • 在表达式中使用
    &
    时,它将获得其操作数的指针
一旦你理解了这些区别,你就可以说

  • int*ab
    是一个声明。星号将
    ab
    指定为指针
  • ab=&a有一个表达式
    &
    获取
    一个
    的指针,并将其分配给
    ab
    ,该ab在声明时指定了指针类型(如上所述)
  • *x=9001
    也是一个表达式,使星号成为解引用运算符。使用星号告诉编译器赋值的目标是
    x
    指向的对象,而不是
    x
    本身

  • 声明指针或取消引用指针时需要星号。这两个函数的语法实际上是相同的,但在每个赋值语句中赋值的内容是不同的

    int
    是一个值。
    int
    变量存储在存储位置。指向
    int
    的指针也是一个值,但其值指的是存储位置。使用指针执行赋值时,可以为指针本身赋值(指针引用的存储位置的地址),也可以为指针引用的存储位置赋值

    如果函数的形式参数中出现
    int*x
    ,或者在定义
    ab
    变量的声明
    int*ab
    中,您需要星号,因为您将变量或参数声明为“指向int的指针”类型

    在赋值
    ab=&a
    中,您不需要星号,因为您将变量
    a
    的地址赋值给指针
    ab
    ——您赋值的是指针本身的值,而不是指针指向的值

    在赋值
    *x=9001
    中,需要星号来获取指针所指的存储位置。这称为“取消引用”指针。您没有给指针本身赋值,而是给指针引用的存储位置赋值,该存储位置是为function
    main
    中的变量
    a
    分配的存储

    Eric Lippert的这篇文章可能对您有很大帮助:


    只要符合指导原则,基本问题就可以了,比如表明你已经付出了努力,并在适用的情况下提供了一个解决方案。在这种情况下,每本C++语言书都要教语言的基础知识,深入了解你为什么需要星号。不管你的问题有多困难,你都必须自己研究。你可以在这里很容易地找到这个答案,或者通过谷歌快速搜索。你要问的每一个问题都应该包含在介绍性的问题中。这是一个简单的问题,任何教科书/谷歌搜索都可以轻松回答。我认为这是一个从语言开始的人提出的公平问题,因为这两个符号的含义都会随上下文而变化。谢谢,我想我现在明白了。不知何故,我只能在1分钟后接受你的回答:/