我是C ++的新手,所以请原谅我,如果我的问题看起来很基本,我在使用星号时无法重新分配指针,这是我的代码:
int val = 8;
int number = 23;
int *pointer = &val;
*pointer = &number; //<-- error
这给出了一个错误:从不兼容的类型int赋值给int。这是我试过的:
pointer = &number; // this works
因此我的问题是,为什么这是错误的:*指针=&amp;数字
答案 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