Вот что говорит стандарт (C99 6.3.2.1/3 - Другие операнды - Lvalues, массивы и указатели функций):
За исключением случаев, когда это операнд оператора sizeof или унарный & amp; оператор или является строковым литералом, используемым для инициализации массива, выражение, которое имеет тип '' array of type '', преобразуется в выражение с типом '' указатель на тип '', который указывает на начальный элемент объекта массива и не является lvalue.
blockquote>Это означает, что в любом случае имя массива используется в выражении, оно автоматически преобразуется в указатель на 1-й элемент массива.
Обратите внимание, что имена функций действуют аналогичным образом, но указатели на функции используются гораздо меньше и гораздо более специализированным способом, так что это не вызывает почти столько же путаницы, как автоматическое преобразование имен массивов в указатели.
Стандарт C ++ (преобразование с преобразованием массива в переменную 4.2) ослабляет требование преобразования к (выделение мое):
lvalue или rvalue типа «массив NT» или «массив неизвестной границы T "можно преобразовать в rvalue типа« указатель на T ».
blockquote>Таким образом, преобразование не
[gg]. Это также почему в C вам следует избегать использования параметров массива в функции прототипы / определения (по-моему - я не уверен, есть ли какое-либо общее согласие). Они вызывают путаницу и в любом случае являются фикцией - используют параметры указателя, и путаница может не исчезнуть целиком, но, по крайней мере, объявление параметра не лежит.
AFAIK, это не поддерживается объектной моделью. Однако LINQ поддерживает метод для выполнения запроса (strangly достаточно названный DataContext. ExecuteQuery). Похож на Вас, может использовать это, чтобы назвать произвольную часть SQL и отобразить его назад на LINQ. Вы не будете SQL, свободным из-за встроенного SQL, но Вы не должны будете использовать sproc.