﻿# V548\. TYPE X\[\]\[\] is not equivalent to TYPE \*\*X\. Consider inspecting type casting\.

Анализатор обнаружил потенциально возможную ошибку, связанную с явным приведением типа\. В программе массив, объявленный условно как "type Array\[3\]\[4\]", приводится к типу "type \*\*"\. Это приведение типа, скорее всего, не имеет смысла\.

Типы "type\[a\]\[b\]" и "type \*\*" представляют собой разные структуры данных\. Type\[a\]\[b\] это единый участок памяти с которым можно работать как с двумерным массивом\.  Type \*\* \- это массив указателей на какие\-то участки памяти\.

Пример:

```cpp
void Foo(char **names, size_t count)
{
  for(size_t i=0; i<count; i++)
    printf("%s\n", names[i]);
}

void Foo2()
{
  char names[32][32];
  ...
  Foo((char **)names, 32); //Crash
}
```



Исправленный вариант:

```cpp
void Foo2()
{
  char names[32][32];
  ...
  char *names_p[32];
  for(size_t i=0; i<32; i++)
    names_p[i] = names[i];
  Foo(names_p, 32); //OK
}
```