В чем разница между следующими двумя определениями функций?
В качестве параметра передается 2D-массив.Разница между типами параметров
void fun(int a[][3])
{
//do some task
}
void fun(int (*a)[3])
{
//do some task
}
В чем разница между следующими двумя определениями функций?
В качестве параметра передается 2D-массив.Разница между типами параметров
void fun(int a[][3])
{
//do some task
}
void fun(int (*a)[3])
{
//do some task
}
Ничего, []
это просто синтаксический сахар для указателя.
Вот простой тест, чтобы показать, что даже не разница в индексации:
#include <stdio.h>
void fun1(int a[][3]) { printf("%d\n", a[2][2]); }
void fun2(int (*a)[3]){ printf("%d\n", a[2][2]); }
void main() {
int a[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
fun1(a); // prints 9
fun2(a); // prints 9
}
Ничего, оба такие же. Только для нашей цели.
Нет разницы между двумя вышеуказанными. В C, когда обозначение массива используется для параметра функции, оно автоматически преобразуется в объявление указателя.