2013-04-06 112 views
-1

作品:數組分配值

int GlobalVar = 5; 
int * LPVar[] = {&GlobalVar}; 

不起作用:

int GlobalVar = 5; 
int * LPVar[]; // int * LPVar[1] doesn't work too 

LPVar[0] = &GlobalVar; // errors here 

------構建開始:項目:指針,配置:發行的Win32 - ----編譯... ilovpointers.cpp \ ilovpointers.cpp(9):錯誤C2466:不能分配恆定大小0 的陣列\ ilovpointers.cpp(9):錯誤C4430:。缺少類型說明 - 詮釋 假定。注意:C++不支持默認int \ ilovpointers.cpp(9) :錯誤C2040: 'LPVar': 'INT []' 在間接 的水平不同於 '詮釋* [1]' \ ilovpointers.cpp (9):錯誤C2440:初始化': 不能從「詮釋*」轉換爲「INT []」 沒有轉換到數組類型,雖然有轉換到引用或指針數組生成日誌保存在 「文件:// F:\ Visual Studio中 C++ \ PROJECT1 \指針\指針\發佈\ BuildLog.htm」 指針 - 4 誤差(S),0警告(S) ==========構建:0成功,1失敗,0最新,0跳過==========

E DIT:

我解決了,但有問題。

#include <iostream> 
#include <stdio.h> 

using namespace std; 

int GlobalVar = 5; 
int * LPVar[1]; 


void main() 
{ 
    LPVar[0] = &GlobalVar; 
    printf("%i", *LPVar[0]); 

    cin.get(); 
} 

LPVar是一個全局數組,所以爲什麼當它剛剛定義之後它不工作?

+2

'int * LPVar [1]'應該可以工作。它有什麼問題? – Pubby 2013-04-06 19:34:37

+1

你確定'int * LPVar [1];'不起作用嗎?然後告訴我們錯誤。 – john 2013-04-06 19:35:03

+0

是什麼問題? – 2013-04-06 19:35:37

回答

2
  • 代碼是否在文件範圍?

    答案似乎是肯定的給予更新的代碼片段。

  • 如果是這樣,你不能有像LPVar[0] = &GlobalVar;在文件範圍內書面隨機分配。您只能在文件範圍內聲明(不帶初始化符)或定義(可選地帶有初始化符)。

在你的問題,這工作(事實上它應該),因爲有兩個初始化變量定義。

int GlobalVar = 5; 
int *LPVar[] = {&GlobalVar}; 

此代碼不能正常工作(因爲它確實不應該),因爲第三行是一個賦值語句,而不是一個聲明或定義:

int GlobalVar = 5; 
int *LPVar[];   // Declaration, not definition 
LPVar[0] = &GlobalVar; // Assignment is not allowed outside a function body 

變:

int GlobalVar = 5; 
int *LPVar[1];   // Definition without initializer 
LPVar[0] = &GlobalVar; // Assignment is not allowed outside a function body 
+0

非常感謝! – deepspace 2013-04-06 19:49:17