当我尝试将变量保存到二维数组时,它将其保存为二维[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!");
}
答案 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
解析为编译时常量,这似乎不适合你。
此外,虽然&queue
和queue
在大多数情境中都解析为同一地址,但它们的类型不同(如elsewhere on SO所述)。清除维度顺序问题后,类型正确的分配将是:
kolejka = queue;