【问题标题】:why am i getting warnings errors due to assignment of a variable's address to a pointer in the global scope?为什么我会因为将变量的地址分配给全局范围内的指针而收到警告错误?
【发布时间】:2023-01-09 03:21:09
【问题描述】:

我刚刚开始使用指针,由于某种我无法理解的原因,编译器正在标记以下程序。代码如下:

#include <stdio.h>

int dec = 0;
int *d;
d = &dec;

int main() {
    return 0;
}

当我将这些声明填充到 main 的正文中时没有错误。我使用的 gcc 版本是 gcc 版本 12.2.0(使用 MSYS2 下载)和代码编辑器 MS visual code。有人可以对此发表解释吗?

正如我上面所说的,我随机开始输入一个程序来熟悉指针,我希望指针的处理不会有任何变化,无论它们在哪里被声明和初始化。

【问题讨论】:

  • 请养成避免全局或文件范围变量的习惯。越早停止使用全局变量就越容易。
  • 此外,如果您收到编译器警告/错误并想询问它们,请将它们包含在您的问题中。

标签: c pointers compiler-errors scope warnings


【解决方案1】:

您正试图在函数之外执行赋值,这是不允许的。你什么能够做的是初始化:

int *d = &dec;

【讨论】:

    【解决方案2】:

    您只能在文件范围内使用声明。

    在提供的程序中,您使用的是赋值语句

    d = &dec;
    

    在文件范围内。所以编译器会报错。

    相反,你可以写例如

    #include <stdio.h>
    
    int dec = 0;
    int *d = &dec;
    
    int main( void ) {
        return 0;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-10
      • 2020-07-06
      相关资源
      最近更新 更多