Я не могу понять разницу между различными объявлениями массива или массивом 2d.
, например:ссылаясь на массивы как указатели
void swap(char **a, char **b) {
char *t = *a;
*a = *b;
*b = t;
}
int main(int argc, char **argv) {
char a[] = "asher";
char b[] = "saban";
swap(&a,&b);
}
этот код не компилируется, он выводит:
warning: passing argument 1 of ‘swap’ from incompatible pointer type
test.c:10: note: expected ‘char **’ but argument is of type ‘char (*)[6]’
не a
указатель на первую ячейку массив символов и &a
является указателем на указатель?
другой пример:
char (*c)[3];
char (*d)[3];
swap(c,d);
не компилируется либо .. это char (*c)[3]
же, как указатель на char a[] = "ab"
?
Однако это делает компиляции:
char *c[3];
char *d[3];
swap(c,d);
поэтому я совершенно запутался. Почему существует разница? Есть ли какие-то правила в этой проблеме, чтобы я не мог все время ошибаться?
Спасибо всем
Это второй раз, когда мы видели этот код в течение трех дней: [Перестановка двух строковых указателей] (http://stackoverflow.com/questions/3816233/). Если, случайно, это связано с тем, что вы делитесь классом с басом, вы можете захотеть собраться с ним для взаимной помощи ... – dmckee