【问题标题】:Pointer variable used without initialization C Visual在没有初始化的情况下使用的指针变量 C Visual
【发布时间】:2015-01-26 02:01:11
【问题描述】:
void main(){
float a = 5;
float *test;
*test = a;
}

这不会编译。为什么?我的意思是立即存在一个错误,即指针变量在没有初始化的情况下无法使用。

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

【问题讨论】:

  • 请显示实际的编译器错误。
  • 在主帖中添加了一个链接
  • 你确定不想要 test = &a; ?
  • @Greyshack 你显然编译了代码......
  • 是的,我知道它是编译的,我用错了对不起这个词;我不知道怎么称呼它

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


【解决方案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】:
    test = &a;
    

    问题是当你声明指针变量时,它没有得到地址,但它是一个变量地址。因此,如果您必须直接更改地址,请使用我在第一行写的内容。

    使用*test 会改变内容(所以如果*test = 1 和a = 2,当你做*test = a 时,test 的内容将是2)。因为 *test 的声明中没有内容,所以不能修改不存在的内容。

    之后,一个更高效的小技巧(因此不必像你那样创建指针):

    void function(int *a); /* declaration */
    function(&a); /* call */
    

    当你在函数中修改“a”时,它会因为地址而在main中被修改:你改变的是内容,而不是容器。

    *a = 1;
    

    现在您将拥有一个 == 1

    【讨论】:

      【解决方案3】:

      这不起作用,因为此时指针不指向任何东西(悬空指针),您仍然告诉它分配在他指向的任何地方找到的值。这就是问题所在。它不能给任何东西赋值。

      你必须给它一个要指向的变量的地址。之后,您可以在指针的帮助下尊重它并为该变量赋值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-24
        • 1970-01-01
        • 2017-04-22
        • 2015-08-10
        • 2013-09-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多