void main(){
float a = 5;
float *test;
*test = a;
}
这不会编译。为什么?我的意思是,如果没有初始化,指针变量就会立即出现错误。
的链接答案 0 :(得分:1)
test = &a;
事情就是当你声明指针变量时,它不会得到一个地址,但它是一个变量地址。因此,如果您必须使用我在第一行写的内容直接更改地址。
使用*test
将更改内容(因此,如果* test = 1且a = 2,则执行*test = a
时,测试内容将为2)。因为* test的声明中没有内容,所以你不能修改那些不存在的内容。
之后,一个更高效的小技巧(所以不要像你那样创建指针):
void function(int *a); /* declaration */
function(&a); /* call */
当您在函数中修改“a”时,由于地址的原因,它将在main中进行修改:您更改内容,而不是容器。
*a = 1;
在主要内容中你现在有一个== 1
答案 1 :(得分:1)
void main(){
float a = 5;
float *test; // now the pointer test contains a random value
// and because it can be anything it is not safe to access that memory
*test = a; // not safe!. Dereferencing a random address will give garbage.
}
如果希望指针具有变量a的地址,请使用test = &a
。
答案 2 :(得分:0)
这不起作用,因为在那一点上指针没有指向任何东西(悬空指针),你仍然告诉它指定在他指向的任何地方找到的值。这就是问题所在。它无法将值分配给任何内容。
你必须给它指向一个变量的地址。之后,您可以使用指针来对它进行处理并为该变量赋值。