2014-09-22 2 views
-2

Я посылаю массив для функции frekvens_of_array и его размер. Проблемы постоянно говорят мне, что я не могу сравнить pointer и int. Я пытаюсь вставить новый уникальный номер в frekvens и добавить 1+, чтобы каждый раз набирать номер в alanyzed_arrayНе удается сравнить указатель и int, C

Когда я создаю эту программу, я получаю ошибки и предупреждения, подобные приведенным ниже.

if(frekvens[j] != analyzed_arr[i]) warning: comparision between pointer and integer [enable by default]

frekvens[j] = analyzed_arr[i]; error: incompatible types when assaigning to type 'int[1]' from type 'int'

int frekvens_of_array(int analyzed_arr[100], int array_size){ 
    int frekvens[100][1]; 
    int i = 0; 
    int j = 0; 
    int n = 0; 
    int hit = 0; 

    for(i = 0; i < array_size; i++){ 

    if(frekvens[j] != analyzed_arr[i]){ 
     frekvens[j] = analyzed_arr[i]; 

     for(n = 0; n < array_size; n++){ 
      if(frekvens[j] == analyzed_arr[n]){ 
       hit++; 

      } 

     } 
     frekvens[j][0] = hit; 
     j++; 
    } 

    } 


    return 0; 
} 

int main(void){ 
int ange_tal_array[100]; 
int array_size = 100; 

frekvens_of_array(ange_tal_array, array_size); 
return 0; 
} 
+4

Почему вы используете двумерный массив 100 * 1 вместо одномерного массива? – interjay

+1

Не могли бы вы объяснить, что должен делать этот код? Вы читаете «frekvens» без инициализации каких-либо его значений. –

ответ

1

К сожалению, я понял, что у меня есть недопонимание кода. Правильный путь, чтобы решить вашу проблему, чтобы изменить декларацию frekvens от:

int frekvens[100][1]; 

к:

int *frekvens[100]; 

сделать это массив указателей. И другие части вашего кода не нужно изменять.

+0

Да, я пропустил этот пункт actaully, я хотел, чтобы что-то выглядело как {1 => {количество раз он появляется}, 2 => {количество раз это появляется}} – Nicco

0
int frekvens[100][1]; 

Это 2D-массив из 100 строк и 1 столбца. Честно говоря, наличие только одного столбца не имеет никакого смысла; вы должны просто превратить его в массив 1D.

вопрос здесь:

if(frekvens[j] != analyzed_arr[i]) 

Вы только индексирование половину вашего 2D массива. frekvens[j] имеет тип int[1], так что это все еще массив. Затем вы сравниваете целое число, которое не работает.

Простейшим решением было бы переписать строку как if(frekvens[j][0] != analyzed_arr[i]), но лучшим решением было бы преобразовать frekvens в 1D-массив.

+0

Да, я пропустил этот момент actaully, мне захотелось что-то посмотреть например {1 => {количество раз это отображается}, 2 => {количество раз, которое оно появляется}} – Nicco

+0

Будет ли 3D-массив этим? – Nicco

+0

@Nicco No. Сделать 'frekvens' массив' 1D' ('int frekvens [100];'), тогда вам придется изменить 'frekvens [j] [0] = hit;' to 'frekvens [j] = хит ", но тогда он должен работать. – Baldrickk

Смежные вопросы