2013-02-19 2 views
1

Я получаю ошибку компилятора индексацию при попытке это:C Доступ многомерный массив

int **arrays; 
// allocate and initialize it.... 
int pos1 = 0; 
int pos2 = 1; 
int value = (*arrays[pos1])[pos2]; 

Если часть в скобках разыменовывает в виде int* указателя, почему бы доступ к массиву не быть законным?

+0

часть в скобках будет разыменования к 'int', а не' 'Int * – sgarizvi

+0

Почему? Как бы я разыменовал его в int *? – bgroenks

+0

'arrays [pos1]' дает вам 'int *', а затем вы ссылаетесь на '' int * 'с помощью оператора' * '. Таким образом, вы получаете 'int'. – sgarizvi

ответ

3

Часть в круглых скобках - int. Во-первых, arrays[pos1] дает указатель (int*), который вы затем разыменовали (через предварительно установленный оператор *). Таким образом, (*arrays[pos1]) является простым int, а не указателем.

Если ваша цель состоит в том, чтобы просто открыть позицию с в многомерном массиве, забыть * и просто использовать:

arrays[pos1][pos2] 
+0

Я не знал, что работал в C. Спасибо. – bgroenks

2

Проблема заключается в следующей строке:

int value = (*arrays[pos1])[pos2]; 

У вас есть int **, arrays[pos1] делает его int *, что вы в дальнейшем разыгрываете, делая *arrays[pos1], поэтому, когда вы делаете (*arrays[pos1])[pos2], (*arrays[pos1]) является int, а не int*, который вызывает ошибку.

Вы можете просто сделать

int value = arrays[pos1][pos2]; 
+0

+1 для правильного ответа. Благодарю. – bgroenks

0

способ поместить значение (градиент), а затем проследить sumlines. Чтобы заставить массив вести себя, это реальное упражнение с помощью скобок. Может быть, хрикархий приказал. Бытие от

FOR петли со структурным символом {}, содержащие символ результата математики [] []. Это петли FOR, которые генерируют массив Display!

Поля относительно небольшие, чтобы получить приличную установку или полную тарабарщину. Цель состоит в том, чтобы хранить информацию в 2D-массиве. Поместите там новую информацию и получите доступ к этим информационным слотам позже. Я пытаюсь немного повеселиться, и посмотрим, как реагирует логический зверь. Его сказал, что в диапазоне от 1000 часов обучения, вы должны получить чувство для него :)

#include <stdio.h> 
    int main() 
    //2D_Array. Multilist. Sumline and Total Sum . 
    //Select each coordinate by pressing ENTER after each number . 
    //KHO2016.no7. mingw (TDM-GCC-32) . c-ansi . 
    { 
    //declare, valuate 
    int a,b,c=1,d=1,i,j,k,l,sum0=0; 
    int ar_a[20][20]; 

    //calculate 
    jump0: 
    for (l=0;l<1;l++)    // vary the value l<1 - l<10 
    {printf ("M.M.M Shelf %d\n",l); // SHELF2 
    for (k=0;k<1;k++)    // SHELF1 
    {printf ("SumLine%d = %d\n",k,sum0); 
    {for (i=1;i<6;i++)   // COLUMS . 
    for (j=0;j<1;j++)   // LINES . per COLUM 
    {ar_a[i][j]=d*c++;   // put value into 2D_array indevidual result slot. 
    sum0=sum0+(ar_a[i][j]); 
    printf ("%d%d(%.2d*%.2d=%.3d)\t",i,j,d,c-1,ar_a[i][j]);}}}} 

    printf ("TOTAL SUM = %d . Select 2 coordinates [1-5] enter, [0] enter: \n",sum0); 
    scanf ("%d%d",&a,&b); 
    printf ("You selected : %d and %d . Result value = %d\n",a,b,ar_a[a][b]); 
    goto jump0; 

    //terminate 
    return 0; 
    } 
Смежные вопросы