【问题标题】:c++ pointer declaration and assignment [duplicate]c ++指针声明和赋值[重复]
【发布时间】:2014-09-06 19:18:16
【问题描述】:
int num1 = 8;   //okay
int *pointer;   //okay
*pointer = &num1;   //NOT okay, compiler says (Error:a value of type int* cannot be
                    //assigned to an entity of type "int")

int num2 = 8;   //okay
int *pointer = &num2;   //okay

我很困惑为什么第一部分给出错误而第二部分没有,它们在我看来是一样的

【问题讨论】:

  • 改成pointer = &num1,因为pointer的类型是int*&num1的类型也是int*(而*pointer的类型是int )。
  • *& 根据上下文有不同的含义。在声明中它们表示指针类型和引用类型,在表达式中它们是操作符的解引用和地址
  • int *pointer = X; 表示:int *pointer; pointer = X;

标签: c++ pointers declaration


【解决方案1】:

在赋值语句中:

*pointer = &num1;   //NOT okay

*pointerpointer指向的值,类型为int&num1num1的地址,类型为int*。正如编译器所说,您不能将指针分配给整数。

pointer = &num1*pointer = num1 都可以,这取决于您是要修改指针本身还是它指向的值。

在声明中:

int *pointer = &num2;   //okay

尽管外观与赋值语句相似,但它初始化 pointer 而不是 *pointer。它将pointer 声明为一个指针,与int* 类型相同&num2

【讨论】:

    【解决方案2】:

    删除第三行中的 *。它返回存储在当前存储在变量指针中的位置/地址的值,并将其解释为 int。

    【讨论】:

      【解决方案3】:

      运算符& 给出了一个指向正在作用的变量的指针。
      &num1 是一个指向int 的指针(因为num1 的类型为int),它指向@ 的地址987654326@。

      【讨论】:

        【解决方案4】:

        错误信息非常清楚:表达式*pointer 的类型为int,而表达式&num1 的类型为int*。这两种类型不兼容(您尝试将指针分配给非指针)。

        当您在指针上使用取消引用运算符* 时,您会得到指针所指向的内容,如果使用地址运算符&,您会得到(即指向)某物的地址。

        要让pointer 指向一个变量,然后赋值给它:

        pointer = &num1;
        

        【讨论】:

          【解决方案5】:
          int *pointer = &num2;
          

          相同
          int *pointer;
          pointer = &num2;
          

          不是

          int *pointer;
          *pointer = &num2;
          

          【讨论】:

            【解决方案6】:

            以下更多的是一般性描述,而不是对您问题的直接回答...

            如果你声明了某种类型的变量,那么你也可以声明另一个指向它的变量。

            例如:

            int a;

            int* b = &a;

            有两种方法可以“查看”变量b(这可能会让大多数初学者感到困惑)

            • 您可以将b 视为int* 类型的变量。

            • 您可以将*b 视为int 类型的变量。

            因此,一些程序员会声明int* b,而另一些程序员会声明int *b

            但事实是这两个声明是相同的(空格没有意义)。

            您可以使用b 作为指向整数值的指针,或使用*b 作为实际指向的整数值。

            您可以读取指向的值(例如,int c = *b)并写入指向的值(例如,*b = 5)。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-01-13
              • 1970-01-01
              • 2011-02-24
              • 2019-02-09
              • 1970-01-01
              相关资源
              最近更新 更多