당신의이 선언은 작동하지 않습니다
int *array[][]; // this is a pointer to a 2-dimensional array??
첫째, int *
의 2 차원 배열을 선언하기 위해 노력하고있다. 둘째, 배열을 선언하거나 정의 할 때 첫 번째 배열을 제외한 모든 차원을 지정 (크기 지정)해야합니다.
int (*array)[][2]; // This is a pointer to a 2D array of unknown size
이제는 기능의 주요 변형에 사용할 수 있습니다. 처음에는 질문을 잘못 읽었 기 때문에 변형 된 것입니다.
void load(void)
{
...
int tempArray[n][2]; // Note the reversed order of dimensions!
...
array = &tempArray;
...there must be some code here calling functions that use array...
array = 0;
}
배열 이름에 &
이 필요합니다. 다른 함수에서는 다음과 같이 작성해야합니다.
전역 배열에 주소를 할당하는 것은 위험합니다. load()
함수가 반환되면 tempArray
의 저장 공간은 더 이상 유효하지 않습니다. 따라서 할당을 수행하는 유일한 안전한 방법은 전역 변수를 참조하는 함수를 호출 한 다음 함수를 종료하기 전에 전역 변수를 재설정하는 것입니다. (또는 적어도 값이 유효하지 않음을 인식하지만 null 포인터를 0으로 설정하면 임의의 메모리에 액세스하는 것보다 프로그램이 충돌하지 않게됩니다.
또는 배열에 대한 동적 메모리 할당.
귀하의 질문은 실제로 변수 차원이 처음이 아닌 VLA, 가변 길이 배열에 글로벌 포인터를 확인하고자한다
:
int tempArray[2][n]; // Note the reversed order of dimensions!
당신은 단순히에 글로벌 포인터를 만들 수 없습니다 배열.
그래서, 여러 문제가 있습니다 : 당신은 멀티하는 글로벌 포인터를 가질 수 없습니다
는 지역 변수에 글로벌 포인터를 할당 배열에 대한 포인터를 초기화
을 배열에 대한 포인터에 대한
- 표기법 가변 길이가 첫 번째 차원에없는 차원 VLA.
- 전역의 사용을 최소화해야합니다.