2012-03-06 2 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 будет «ни массивом, ни указателем», а вместо этого будет указан как двойной. Вы опечалили или забыли сделать это указателем? – tamarintech

ответ

1

У вас все было в порядке; вам необходимо включить пустые скобки после baln в списке параметров, например, так:

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

Here's a full demo.

+0

Спасибо. Предыдущее сообщение об ошибке с помощью скобок должно быть вызвано некоторой другой ошибкой. – cantouno

+0

@SaiPrasadChimata Поскольку вы новичок в переполнении стека, вы можете не знать о возможности отмечать ответ как принятый, щелкнув контур галочки рядом с ним, если он решил вашу проблему. Это ставит под вопрос вопрос, поэтому будущим зрителям не нужно проверять, был ли найден ответ. Если есть несколько ответов, решающих проблему, и ни один из них явно лучше других - как это имеет место здесь, насколько я вижу, выбор, который следует принять, является произвольным, но обычно принято выбирать первое, что здесь быть минитех. Но вам не нужно принимать ответ, если вы не хотите –

+0

@ DanielFischer: На самом деле, вы были вначале на 32 секунды :) Так что ваш, безусловно, должен быть принятым ответом. – Ryan

1

Вы пытаетесь обработать baln типа double как массив (используя индекс.) Это не сработает.

1

Ваш параметр должен быть объявлен как

double *baln 

указатель на double, или как double baln[], который читает как массив double с, но в качестве параметра функции также обозначает указатель.

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; 
} 

компилируется, но так как вы не знаете, какой размер блока памяти baln указывает на это, вы можете получить доступ к нераспределенную память в этой функции, если вы не будете осторожны.

0

error: subscripted value is neither array nor pointer

baln[id] 

индексируются Value = 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. 
Смежные вопросы