C++ C++;指针混淆

C++ C++;指针混淆,c++,pointers,initialization,variable-assignment,C++,Pointers,Initialization,Variable Assignment,在定义指针变量时,我们使用如下代码 int *ip; 但是我们也可以在同一行中初始化指针,指向一个随机定义的变量,比如x int x; int *ip = &x; 我们还可以在另一行代码中初始化指针变量,例如 int x; int *ip; ip = &x; 我的问题是,当我使用*ip初始化指针变量时 int x; int *ip; *ip = &x; Visual Studio提供了一个错误: 错误C2440'=':无法从“int*”转换为“int” 可以请人解

在定义指针变量时,我们使用如下代码

int *ip;
但是我们也可以在同一行中初始化指针,指向一个随机定义的变量,比如x

int x;
int *ip = &x;
我们还可以在另一行代码中初始化指针变量,例如

int x;
int *ip;
ip = &x;
我的问题是,当我使用
*ip
初始化指针变量时

int x;
int *ip;
*ip = &x;
Visual Studio提供了一个错误:

错误C2440'=':无法从“int*”转换为“int”


可以请人解释一下,我刚开始学习C++。< /p> < p>请注意那里的数据类型。< /P> 当你写作时

ip = &x;
这是一个很好的例子。您试图将
x
(指针,基本上是
int*
)的地址存储到
ip
,这也是指向
int
的指针类型的变量(同样,
int*
)。一切都好

另一方面,当你试图写作时

*ip = &x;
这也是一个赋值,但在这里,
*ip
int
类型,
&x
int*
,它们不兼容。因此,编译器会永远警告您


FWIW

 int *ip = &x;
很好,因为这不仅仅是一个简单的任务。定义时,您正在初始化变量
ip
(类型为
int*
)。请记住,这里定义和初始化的变量是
ip
,而不是
*ip
,这与编写非常不同

*ip = &x;

(正如我已经提到的,这是不恰当的。)

小心点::

  • ip=&x
    在这里,您可以分配指针
    ip
    ,地址为
    x

  • *ip=x
    在此设置
    ip
    指向的值,值为
    x


注意:
*ip=&x
是两者的混合,因此不起作用

我认为您的困惑只是来自声明行指针的语法

声明指针时,您将写入
int*p
,这意味着
将符号**p**定义为指向**int**
的指针类型,赋值
=
将值提供给
p
,而不是
*p

当不在声明行时,不会出现混淆
p
是指针。而
*p
是值

换个说法。。。如果声明一个指针是由
ptr2int p=&i
完成的,我想这会更清楚

这就是为什么许多人宁愿将指针类型声明为
int*p
,而不是
int*p
。让人快乐的小语意:)


干杯。

哪一行出现错误?您发布的代码行有效,但您忘记发布不起作用的代码行。这对任何想帮助你的人都没有帮助。@JesperJuhl或你的键盘?:)最快的手指(思想者)第一:)