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或你的键盘?:)最快的手指(思想者)第一:)