函数是添加到数组的两个维度而不是一个C

时间:2015-01-23 20:56:10

标签: c linux

当我尝试将变量保存到二维数组时,它将其保存为二维[0] [1]而不是一维。

例如:

  • dodajDoKolejki(1,1) //将数字1添加到维度1

  • priting数组给出了如下所示的结果,但它不应该改变kolejka [0]

    kolejka[0] = 0 0 1 0 0 0 0 0 0 
    kolejka[1] = 1 0 0 0 0 0 0 0 0
    

int (*kolejka)[2]; // Global variable
...
int queue[2][ilSamochodow+1]; 
kolejka = &queue;
...

    void dodajDoKolejki(int numerWatku,int miasto)
    //Adding numbers from 1-... to random dimensions (given as miasto)
    {
        //Checking if number already exists( int istnieje ) in array
        int istnieje = 0;
        int i;
        for(i=0;i<ilSamochodow+1;i++)
        {
            if(kolejka[miasto][i] == numerWatku)
                istnieje = 1;
        }

        if(istnieje == 0)
        {
            //Looking for 0 in array, if found we can save on its index( == 0)
            i = 0; // Indeks miejsca, w ktorym zapiszemy numerWatku
            while(kolejka[miasto][i] != 0)
                i++;

            kolejka[miasto][i] = numerWatku;
            printf("\nDodano %d do kolejki miasta %d",numerWatku,miasto);
            wypiszKolejke2(miasto);
        }
        else
            printf("\nBlad. Nie mozna dodac, poniewaz watek jest w kolejce!");
    }

2 个答案:

答案 0 :(得分:3)

您的kolejka变量的尺寸和分配不正确。应该是:

int (*kolejka)[ilSamochodow+1]; // Global variable
int queue[2][ilSamochodow+1]; 
kolejka = queue;

基于您尝试使用它的方式。 queue是一个指向ilSamochodow + 1 int数组的指针数组。因此,要声明一个与队列兼容的指针,您需要声明一个指向数组的指针 ilSamochodow + 1 ints。

答案 1 :(得分:0)

这......

int (*kolejka)[2]; // Global variable

...声明一个指向2 int s数组的指针。这......

int queue[2][ilSamochodow+1]; 

...声明一组由ilSamochodow+1 int组成的2个数组。因此,这......

kolejka = &queue;

...将不兼容类型的指针指定给变量kolejka。 (您的编译器应该警告您。)解除引用指针因此会产生未定义的行为。

如果您这样声明queue,那就没关系了:

int queue[ilSamochodow+1][2]; 

或者如果你这样声明kolejka

int (*kolejka)[ilSamochodow+1];

由于kolejka是全局的,后者假设ilSamochodow解析为编译时常量,这似乎不适合你。

此外,虽然&queuequeue在大多数情境中都解析为同一地址,但它们的类型不同(如elsewhere on SO所述)。清除维度顺序问题后,类型正确的分配将是:

kolejka = queue;