c ++指针声明和赋值

时间:2014-07-16 09:57:18

标签: c++ pointers declaration

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

我很困惑为什么第一部分出错而第二部分没有,他们看起来和我一样

6 个答案:

答案 0 :(得分:5)

在作业陈述中:

*pointer = &num1;   //NOT okay

*pointerpointer指向int类型的值,而&num1是[{1}}的地址,类型为num1 }。正如编译器所说,你不能指定一个整数的指针。

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

在宣言中:

*pointer = num1

尽管与赋值语句的外观相似,但这会初始化int *pointer = &num2; //okay 而不是pointer。它声明*pointer是一个指针,与pointer具有相同类型int*

答案 1 :(得分:1)

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

答案 2 :(得分:0)

运算符&给出一个指向正在其上运行的变量的指针 &num1是指向int(因为num1类型为int)的指针,指向num1的地址。

答案 3 :(得分:0)

错误消息非常明确:表达式*pointer的类型为int,表达式&num1的类型为int*。这两种类型不兼容(您尝试将指针指定给非指针)。

当你在指针上使用解除引用运算符*时,你会得到指针所指向的内容,如果使用address-of运算符&,你将获得地址(即指向某事。

要使pointer指向变量,只需指定给它:

pointer = &num1;

答案 4 :(得分:0)

int *pointer = &num2;

相同
int *pointer;
pointer = &num2;

int *pointer;
*pointer = &num2;

答案 5 :(得分:0)

以下是一般性描述,而非直接回答您的问题...

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

例如:

int a;

int* b = &a;

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

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

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

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

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

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

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