繁体   English   中英

重新分配指针给出错误

[英]reassign pointer gives error

我是C ++的新手,因此,如果我的问题似乎很基本,请原谅我,使用星号时我无法重新分配指针,这是我的代码:

int val = 8;
int number = 23;
int *pointer = &val;
*pointer = &number;    //<-- error

这给出了一个错误:从不兼容类型int分配给int。 这是我尝试过的:

pointer = &number;  // this works

因此,我的问题是,为什么这是错误的:* pointer =&number

在您的代码中

 *pointer = &number;    //<-- error

通过说*pointer ,您将取消引用int类型的指针,然后尝试为其分配一个指针类型值,这是不正确的。

您要做的就是分配变量的地址并保持该地址,您希望指针变量本身位于分配的LHS上。 所以,

 pointer = &number;

是正确的方法。

导致错误的原因是因为您误解了每个变量的类型。

int val = 8; // type of `val` is int
int number = 23; // type of `number` is an int
int *pointer = &val; // type of `pointer` is an int *
*pointer = &number;    // type of `pointer` is int *, so type of `*pointer` is int

这是行不通的,因为*pointer 取消了对*pointer 引用 ,因此您要为指针分配一个地址,这不是您想要的。

当你说

int *pointer

*表示您正在创建指针,可以将*视为数据类型的一部分。 即它是一个指向整数类型的指针。 要引用指针本身(在内存中存储地址的类型),您只需使用指针的名称即可,就像常规变量一样。

当添加* infront时,您将取消引用指针。 意味着,您正在访问指针所指向的内存地址中存储的任何内容,在本例中为int。

基本上,指针为您提供内存中的地址,*指针为您提供存储在该地址的int。

int *pointer = &val;

打破这个实际上意味着

int* pointer;
pointer = &val;

当您取消对整数指针的引用时,它只是一个整数。当将&添加到非指针中时,它将成为一个指针。这样做很不好,因为* ptr不是指针,而&i是指针

int n = 0;
int *ptr = &n //good,because they are both pointers
int i = 0;
*ptr = &i //bad because only one is a pointer

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM