重新分配指针给出错误

时间:2015-11-30 15:50:03

标签: c++ c pointers dereference

我是C ++的新手,所以请原谅我,如果我的问题看起来很基本,我在使用星号时无法重新分配指针,这是我的代码:

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

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

pointer = &number;  // this works

因此我的问题是,为什么这是错误的:*指针=&amp;数字

5 个答案:

答案 0 :(得分:4)

在您的代码中,

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

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

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

 pointer = &number;

是正确的方法。

答案 1 :(得分:1)

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

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 取消引用指针,所以你要为指针指定一个地址,这不是你想要的。

答案 2 :(得分:1)

当你说

int *pointer

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

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

基本上,指针在内存中给你一个地址,*指针给你存储在那个地址的int。

答案 3 :(得分:0)

int *pointer = &val;

打破这一点实际上意味着

int* pointer;
pointer = &val;

答案 4 :(得分:0)

当你对一个整数指针进行derefrence时它变成一个整数。当你添加&amp;一个非指针它变成一个指针。所以 很糟糕,因为* ptr不是指针而且&amp; 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