2013-04-06 6 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 : 누락 된 형식 지정자 - int 꾸민. 참고 : C++는 default-int. \ ilovpointers.cpp (9) 을 지원하지 않습니다. 오류 C2040 : 'LPVar': 'int []'간접 참조 수준이 다릅니다. 'int * [1]'에서부터 . \ ilovpointers.cpp (9) : 오류 C2440 : '초기화 중': 'int *'에서 'int []'로 변환 할 수 없습니다. 배열에 대한 참조 또는 포인터로의 변환이 있긴하지만 배열 형식 변환이 없습니다. 빌드 로그가 "파일 : // f : \ Visual Studio C++ \ Project1 \ Pointers \ Pointers \ Release \ BuildLog.htm"포인터 - 4 오류, 0 경고 ========== 빌드 : 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

+1

'int * LPVar [1];'가 작동하지 않습니까? 그럼 우리에게 오류를 보여주십시오. – john

+0

무엇이 문제입니까? –

답변

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