分配全局指针的值

时间:2011-07-01 10:20:38

标签: c++

#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;
}

3 个答案:

答案 0 :(得分:12)

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

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

  

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

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

答案 1 :(得分:5)

转让声明

p=&a;

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

该行

int *p=&a;

是合法的,因为您声明并初始化变量。

This question是一个类似的问题。

答案 2 :(得分:2)

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

在第一种情况下,=只是初始化语法的一部分,它实际上不是operator =,因为它不是赋值,尽管结果(后置条件)是相同的:变量最终得到那个价值。它是如何到达那里的。