2010-11-19 3 views
1

этот код правилен в C#статический массив в C# против C/C++

int x = int.Parse(Console.ReadLine()); 
     int[] t = new int[x]; 

но в C/C++ в неправильном

int n; scanf("%d",&n); int a[n]; 

как в C# статический массив выделения во время выполнения (или в C# массив динамический?)

+9

Вы должны принять ответы на свои вопросы. – SLaks

+1

Вот как работает SO. Вы задаете вопросы, мы отвечаем на них в меру своих способностей. Когда вы получите ответ, который вам нравится, поднимите его, нажав стрелку вверх^рядом с этим ответом. Один из ответов будет лучшим ответом для вашей конкретной ситуации. Вы должны «принять», чем ответить, нажав галочку рядом с этим ответом. Когда вы поднимаете или принимаете ответы, ответчик получает «очки репутации» за свои усилия, которые являются валютой, которая управляет сайтом. Вы задали много вопросов, но никогда не принимали никаких ответов. Пожалуйста, вернитесь и принимайте ответы –

+0

Я не уверен, что понимаю, что вы пытаетесь задать здесь. Вы можете уточнить? – Bryan

ответ

4

C# массивы выделяются во время выполнения на куче.

C массивы выделяются при компиляции в стеке.
C также может выделять массивы во время выполнения с использованием malloc. (Только не забудьте free их, когда вы сделали)

+3

«Просто помните» - причина, по которой было изобретено много языков программирования;) – Grozz

+1

Следует отметить, что если 'malloc' имеет довольно мало места в C++. (Может быть интересно, если вы действительно знаете, что делаете, и вы делаете микро-оптимизации, в противном случае) вместо этого вы должны использовать 'new'. И вы, вероятно, не должны использовать голые массивы (если у вас нет веских причин). Тот факт, что C++ является (в основном) надмножеством C, означает в C++, вы * можете * делать все, что можете, на C, но вы действительно не должны этого делать. – Jasper

3

В C++, вам нужно будет сделать:

int* a = new int[n]; 

// Do stuff with the array 

delete[] a; 
2

но в C/C++ в неправильно

int n; scanf("%d",&n); int a[n]

Нет! В C99 этот код верен, потому что C99 поддерживает переменные длины массивов (VLA).
В C++ код плохо сформирован, потому что размер массива должен быть постоянным выражением в C++ (хотя g ++ поддерживает VLA как расширение).

Смежные вопросы