2016-10-21 1 views
4

함수는 다음과 같이 정의된다 : I은 주 후에서 다음 기능의 배열을 사용하고자

main{ 
. 
. 
double signalstnV[iteration][2*range+1][3]; 
. 
. 
check = strip(signalstnV); 
. 
} 

:

int strip(double *signalstnV){ 
. 
. 
return 0; 
} 

메인 함수로 호출된다 스트립 기능으로 수정됩니다. 'INT 주 (INT, CHAR **)'기능에서 :

sim.C : 54 : 26 : 오류 :하지만 컴파일하는 동안 내가 sim.C

을 다음과 같은 오류를 얻고있다 변환 할 수 없습니다 '더블 () [3] '인수'1 '에서'int strip (double *) '에 대해' '을'double '로 변경

check = strip (signalstnV);

나는 그것을 이해할 수 없다. 도와주세요. 내 주요 목표는 스트립 함수에서 배열을 생성하고 나중에 코드에서 다른 함수로 전달하는 것입니다.

invalid types ‘double[int]’ for array subscript 
if (signalstnV[k][j][3] < -0.015){ 
..} 
+2

이것이 C++ 문제인 경우 "C"태그를 선택하지 마십시오. 또한'iteration'과'range'의 정의를 보여주십시오. –

+0

반복과 범위는 코드 전체에서 사용하는 정수 상수입니다. –

+0

@ user3121023 C가 아닌 C에서만 작동합니다. –

답변

5

통상의 일차원 배열 붕괴 :

은 또한 내가 다른 함수

threshold(double * signalstnV) 

이 어레이를 사용하고 어떤 특정 값을 추출하는 루프를 사용하는 경우, 그와 같은 오류를 범 첫 번째 값을 가리키는 포인터. 다차원 배열은 첫 번째 차원에서만 쇠퇴하여 배열의 첫 번째 차원에 대한 포인터로 쇠퇴합니다. 당신이 첫 번째 값을 "슈퍼 붕괴"포인터로 다차원 배열을하고자하는 경우

, 단순히 그 자신을 : 이러한 경우에 대한

check = strip(&signalstnV[0][0][0]); 
+0

고마워요, 정말이 개념을 알지 못합니다. –

+0

슈퍼 감퇴를 사용하여 괜찮습니다,하지만 지금은 다른 함수 임계 값 (double * signalstnV)에서이 배열을 사용하고 for 루프를 사용하여 특정 값을 추출 할 때 다음과 같은 오류가 발생합니다. 잘못된 유형 'double [int]'배열 첨자 if (signalstnV [k] [j] [3] <-0.015) { –

+1

물론 포인터이기 때문에 더 이상 다차원 배열이 아닙니다. –

2

, 다소 복잡한 유형 - 사용 유형 별칭 :

IterationRangesValues signalstnV[3]; 
check = strip(signalstnV); 

당신은 북동 : 다음

//double signalstnV[iteration][2*range+1][3]; 
using IterationValues = double[iteration]; 
using IterationRangesValues = IterationValues [2*range+1]; 
//... 

는,이 호출하는 것은 분명하다 서명 : strip(IterationRangesValues * matrix) 또는이 strip(IterationRangesValues (& matrix)[3]). 물론 마지막 배열을 위해서 typedef를 사용할 수도 있습니다.

또한 std::array을 사용할 수 있습니다 :

using IterationValues = std::array<double, iteration>; 
using IterationRangesValues = std::array<IterationValues, 2*range+1>; 
//... 
+0

나는'std :: array'가 최선의 대안입니다 – Raindrop7

+0

std :: array는 C++에서만 작동합니다 – Andrej

+0

@Alex - 편집 완료 – PiotrNycz

0

참조로 배열을 전달하려면 한 가지 방법은 다음과 같습니다

template<size_t X, size_t Y, size_t Z> 
int strip(double(&strip)[X][Y][Z]) 
{ 
} 

그런 다음 배열의 다양한 크기로 호출 할 수 있습니다. 당신은 단지 하나 개의 크기를 지원해야하는 경우

, 다음 template 줄을 제거하고 지원하는 데 필요한 실제 치수 XYZ를 교체합니다.