【问题标题】:Assigning value of global pointers分配全局指针的值
【发布时间】:2011-07-01 10:20:38
【问题描述】:
#include <iostream>

int a = 9;
int *p;
p = &a;

int fun();

int main()
{
    std::cout << fun();
    return 0;
}

int fun()
{
    return *p;
}

为什么这段代码会报错:

预期的构造函数、析构函数或 '=' 标记之前的类型转换|

而这段代码运行正常:

#include <iostream>

int a = 9;
int *p = &a;

int fun();

int main()
{
    std::cout << fun();
    return 0;
}

int fun()
{
    return *p;
}

【问题讨论】:

标签: c++


【解决方案1】:

您可以在全局范围内声明和初始化变量/类型,而不是分配它们。
main() 是 C++ 程序的开始,分配语句必须在 main 中。

C++03 标准:$3.6.1/1 部分

一个程序应该包含一个名为ma​​in的全局函数,它是程序的指定开始。

如果您来自脚本背景,您应该注意 C++ 与脚本语言的不同之处在于您可以在指定的程序开始范围之外声明项目(main()),但您不能进行任何处理(赋值或其他语句)。

【讨论】:

    【解决方案2】:

    赋值语句

    p=&a;
    

    在您放置它的地方是非法的。赋值必须在函数体内进行。

    线

    int *p=&a;
    

    是合法的,因为您正在声明和初始化一个变量。

    This question 是关于类似的问题。

    【讨论】:

      【解决方案3】:

      关于语言的令人困惑的事情之一:使用相同运算符 = 的两个基本结构表示不同的东西。

      在第一种情况下,= 只是初始化语法的一部分,它根本不是 operator=,因为它不是赋值,尽管结果(后置条件)是相同的:变量以该值结束。只是到达那里的方式不同。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-21
        • 2019-03-17
        • 1970-01-01
        • 1970-01-01
        • 2014-05-18
        相关资源
        最近更新 更多