我是Java的新手。我试图学习指针和参考的概念。有人可以向我解释为什么下面的代码是非法的?为什么我不能将int变量i
分配给int指针*ip
?他们都是int。我真的很挣扎这个概念。
int i = 0;
int *ip = i;
答案 0 :(得分:3)
答案 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
或已分配内存的地址(使用new
或malloc
分配或使用一元&
运算符获取的现有变量的地址),例如
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;