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
我很困惑为什么第一部分出错而第二部分没有,他们看起来和我一样
答案 0 :(得分:5)
在作业陈述中:
*pointer = &num1; //NOT okay
*pointer
是pointer
指向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
)。