2011-07-01 117 views
0
#include <iostream> 

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

int fun(); 

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

int fun() 
{ 
    return *p; 
} 

的價值爲什麼這個代碼給錯誤:分配全局指針

expected constructor, destructor, or type conversion before '=' token|

鑑於此代碼運行正常:

#include <iostream> 

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

int fun(); 

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

int fun() 
{ 
    return *p; 
} 
+0

請注意[格式化您的代碼,如常見問題中所述](http://meta.stackexchange.com/q/22186) – razlebe

回答

12

你被允許在全球範圍內聲明和初始化變量/類型不分配他們。
main()是C++程序的開始,並且assign語句必須在main中。

C++ 03標準:節$ 3.6.1/1

A program shall contain a global function called main, which is the designated start of the program.

如果從腳本背景的,你要注意,C++是不同的腳本語言的方式,你可以在指定的程序開始(main())範圍外聲明項目,但不能進行任何處理(賦值或其他聲明)。

5

賦值語句

p=&a; 

是在你已經把它的地方是非法的。分配必須在函數體內進行。

int *p=&a; 

,因爲你聲明和初始化變量是合法的。

This question是一個類似的問題。

2

關於該語言令人困惑的事情之一:使用相同運算符的兩個基本構造= =意味着不同的事物。

在第一種情況下,=僅僅是初始化語法的一部分,它根本不是運算符=因爲它不是賦值,儘管結果(後置條件)是相同的:變量以該值結束。它是如何到達那裏的。