2012-03-06 4 views
0
void arrayRound(int id, double baln) 
{ 
    baln[id] = (baln[id]*100) + 0.5; 
    int temp = (int) baln[id]; 
    baln[id] = (double) temp; 
    baln[id] = baln[id]/100; 
} 

함수 본문은 오류 메시지를 표시합니다. 이 함수는 배열 인덱스를 가장 가까운 백 번째로 반올림합니다. 나는 개별적으로 인덱스 변수와 배열을 함수에 전달했다. 다음 오류 메시지는 다음과 같습니다이 어레이 오류는 무엇을 의미합니까?

Fxns.c:70: error: subscripted value is neither array nor pointer 
Fxns.c:70: error: subscripted value is neither array nor pointer 
Fxns.c:71: error: subscripted value is neither array nor pointer 
Fxns.c:72: error: subscripted value is neither array nor pointer 
Fxns.c:73: error: subscripted value is neither array nor pointer 
Fxns.c:73: error: subscripted value is neither array nor pointer 

내 첫번째 추측 내가 매개 변수 필드에 baln 후 빈 괄호를 포함하는 데 필요한, 그러나 그것은 도움이되지 않았다이었다. 어떤 아이디어?

+0

인수 목록에'baln' 뒤에 빈괄호를 포함시켜야합니다. 그 시도를 보여줄 수 있습니까? – Ryan

+0

함수 매개 변수를 보면 baln은 "배열이나 포인터가 아니며"대신 double으로 나열됩니다. 오타 또는 포인터를 잊어 버렸습니까? – tamarintech

답변

1

당신이 옳았습니다. 당신과 같이 매개 변수 목록에서 baln 후 빈 괄호를 포함해야합니까 :

void arrayRound(int id, double baln[]); 

Here's a full demo.

+0

감사합니다. 대괄호가있는 이전 오류 메시지는 다른 오류로 인해 표시되었습니다. – cantouno

+0

@SaiPrasadChimata Stack Overflow에 익숙하지 않으므로 문제를 해결 한 경우 옆에있는 체크 표 개요를 클릭하여 답변을 승인 된 것으로 표시 할 수 있습니다. 그 질문에 대한 응답으로 표시되므로 미래의 시청자는 답변이 있는지 여부를 확인할 필요가 없습니다. 문제를 해결하는 몇 가지 해답이 있고 아무 것도 분명히 다른 것보다 우수하다면 - 여기서 볼 수있는 한 내가 받아 들일 수있는 대답은 임의적이지만 선택의 폭은 일반적입니다. 미니텍이야. 그러나 원하지 않으면 대답을 수락 할 필요가 없습니다. –

+0

@ 대니얼 피셔 : 사실, 처음 32 초가 걸렸습니다 :) 그래서 당신은 반드시 받아 들여지는 대답이어야합니다. – Ryan

1

double 유형의 baln을 배열과 같이 (색인을 사용하여) 처리하려고합니다.이 방법은 작동하지 않습니다.

1

는 내 파라미터 double

double *baln 

포인터로 선언하거나한다 double의 배열과 같이 판독 만, 함수 파라미터로서도 포인터를 나타낸다 double baln[] 등. 당신이 baln 점은 무엇 크기의 메모리 블록을 알 수 없기 때문에

void arrayRound(int id, double *baln) 
{ 
    baln[id] = (baln[id]*100) + 0.5; 
    int temp = (int) baln[id]; 
    baln[id] = (double) temp; 
    baln[id] = baln[id]/100; 
} 

당신이 조심하지 않으면 당신은이 기능에 할당되지 않은 메모리에 액세스 할 수 있습니다, 컴파일,하지만 것입니다.

0

error: subscripted value is neither array nor pointer

baln[id] 

첨자는 값 = baln

운영자 [] 만 사용할 수 있습니다 배열이나 포인터에서. 귀하의 경우 baln도 마찬가지입니다. 유형이 double이나 double[] 또는 double*이 아닙니다.

int a[] = { 1,2,3,4,5 }; 
a[0] = 10; // Notice the use of `[]`.This is valid because `a` is an array type. 

int b = 10; 
int * ptr = &b; 
ptr[0] = 99; // Valid because ptr is a pointer type but cause undefined 
       // behaviour for any other index in this example. 

*ptr = 99 ; // This is more readable than the earlier case. 
관련 문제