没有初始化C Visual的指针变量

时间:2014-11-27 12:51:00

标签: c visual-studio pointers compiler-errors initialization

void main(){
float a = 5;
float *test;
*test = a;
}

这不会编译。为什么?我的意思是,如果没有初始化,指针变量就会立即出现错误。

这是指向错误http://i.imgur.com/TDiYOTU.png

的链接

3 个答案:

答案 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)

这不起作用,因为在那一点上指针没有指向任何东西(悬空指针),你仍然告诉它指定在他指向的任何地方找到的值。这就是问题所在。它无法将值分配给任何内容。

你必须给它指向一个变量的地址。之后,您可以使用指针来对它进行处理并为该变量赋值。