为什么我不能将int变量i分配给int指针* ip?他们都是int

时间:2015-12-29 05:21:20

标签: c++ pointers reference

我是Java的新手。我试图学习指针和参考的概念。有人可以向我解释为什么下面的代码是非法的?为什么我不能将int变量i分配给int指针*ip?他们都是int。我真的很挣扎这个概念。

int i = 0;

int *ip = i;

3 个答案:

答案 0 :(得分:3)

int *ip

是一个称为pointer的变量,它可以保存int类型变量的内存地址。 i的类型为int,因此要正确使用指针,请键入

int *ip = &i;

i的内存地址存储到指针ip

答案 1 :(得分:2)

ip 是指针,指针必须保留另一个变量的地址。

int i = 0;
int *ip;
ip = &i;

int *ip = &i;

答案 2 :(得分:-2)

以防

 int *ip = i;

您实际上将值0指定给指针。即ip的类型为int * - 指向int的指针,而不是int。 如果要将0分配给指针使用

 int *ip = NULL; // good way

 int *ip = (int *)i; // incorrect pointer initialization with explicit type conversion

通常,指针的赋值必须是NULL或已分配内存的地址(使用newmalloc分配或使用一元&运算符获取的现有变量的地址),例如

 int *ip = NULL;
 ip = &i; // address of variable
 ip = malloc(sizeof(int)); // allocation in C style
 ip = new int; // allocation in C++ style

然后可以使用指针将值分配给已分配的内存,如下所示:

 *ip = i; // here pointer value (address) is not changed

要查看地址(指针值)和指向值测试该语句:

 std::cout << "Adress " << ip << " contains value " << *ip << std::endl;