Member 14718560 Ответов: 1

Какое отношение это высказывание означает


Я не знаком с программированием и хочу преобразовать этот код в c#..но я не знаю, что означает это утверждение (wsave + n )..
Код:
Пустота Функ(инт Н,двухместная *Р,двойной *wsave,инт *МФБ)
{
В func2(н, р, wsave, wsave + Н МФБ);
}
Значит ли это добавлять ко всем элементам массива?
Может ли кто-нибудь дать мне эквивалентный код на c#?

Что я уже пробовал:

Я пытаюсь преобразовать код выше написанного на c в код c#.

CPallini

Вам нужен конвертер "нонсенс", чтобы преобразовать нонсенс C в нонсенс C#.

1 Ответов

Рейтинг:
6

OriginalGriff

Во-первых, это не будет компилироваться: и C, и C# чувствительны к регистру, так что Void это не то же самое, что void - вы хотите второе, а не первое.

Во-вторых, вы не хотите конвертировать этот код в C#, даже немного. Это использование указателей, а указатели в C# очень, очень сложны в использовании - и это преднамеренно. Как новичок, вы не должны приближаться к указателям в C#!

И без указателей, есть прямой эквивалент в C код в C#, так что wsave + n возвращает ли это указатель на двойное n мест в массиве или удваивает его wsave ссылается на, и без указателей нет прямого способа сделать это: вы не можете ссылаться на массив в C# из любой точки, кроме начала, не копируя его, и это совсем не то же самое.

Мне очень жаль, но вам придется вернуться ко всему коду C, точно определить, что он делает в деталях, и разработать новое приложение C#, чтобы сделать то же самое с использованием структур данных C#. перевод его не приведет к созданию "хорошей программы на C#" - если это вообще возможно без использования небезопасного кода.


Member 14718560

Сэр, если я заменю этот массив обычным массивом (double[] wsave), можете ли вы сказать мне, каков будет результат этого утверждения (wsave+n), учитывая n=10 и размер массива =3?
Правда ли это:
wsave[0]=3
wsave[1]=3
wsave[2]=3

OriginalGriff

Ошибка компиляции в C#.

Перестаньте предполагать, что C# - это надмножество C или что "они в основном одинаковы". Это не так, и особенно когда вы начинаете с указателей C, вы не можете просто перевести код - он должен быть переработан, чтобы работать вообще, не говоря уже о том, чтобы хорошо.

You can think of C# References as "pointers on steroids" but they aren't - they are a very different thing, and some of the thinks you can do with pointers just won't work in C# because if they did they could cause real problems. In C, wsave + n is legal, because C supports pointer arithmetic and returns a pointer to a "new array" which happens to be a portion of the original. You cannot do that with references in C# because if the original reference to the start of the array is discarded, the whole array can be released and destroyed at any time without warning - and then your new reference would be "hanging in midair" pointing at nowhere. This is analogous to the C problem of returning a pointer to a local variable in a function. Since local variables are created on the stack, they are deallocated when the function returns, so the pointer is referencing memory that is no longer assigned and which can be reused.

Перестаньте думать о них как об одном и том же языке и примите тот факт, что перевод не будет работать: вам нужно разработать новое приложение, основанное на функциональности старого, а не на его кодовой базе.

CPallini

5.