Как я могу объединить два массива в C?

При условии, что Вы создаете приложения, предназначенные для Windows:

  • это может уверенный быть информативным для понимания более низких уровней системы - как они работают, как код взаимодействует с ними (даже если только косвенно), и где у Вас есть дополнительные опции, которые не доступны в высокоуровневых абстракциях
  • существуют времена, когда Ваш код не мог бы быть столь же эффективным, высокоэффективным или достаточно точным для Ваших требований
  • Однако во все большем количестве случаев, людей как мы (кто никогда не изучал "неуправляемое кодирование"), будет в состоянии осуществить программирование, мы пытаемся обойтись без "изучения" Win32.
  • Далее, существует много сайтов, которые обеспечивают рабочие образцы, кодируют фрагменты и даже полностью функциональный исходный код, который можно "усилить" (одолжите, незаконно заимствуйте - но проверьте исполнение любой лицензии повторного использования или авторского права!) для заполнения любых разрывов, которые не обрабатываются библиотеками классов платформы.NET (или библиотеки, которые можно загрузить или лицензировать).
  • , Если можно осуществить подвиги, Вам нужно, не бездельничая в Win32, и Вы делаете хорошее задание разработки правильно построенного, читаемого управляемого кода, тогда я сказал бы, что освоение.NET будет лучшим выбором, чем распространение себя тонкий более чем две совсем других среды.
  • , Если часто необходимо усиливать те функции Windows, которые не получили хорошее покрытие библиотеки классов Платформы, тогда любой ценой, осваивают навыки, в которых Вы нуждаетесь.
  • я лично провел слишком много времени, волнуясь о "других областях", кодирования этого я , предположил понимать для создания "хороших программ", но существует много мазохистов там, которые думают, общие потребности и требования похожи на свое собственное. Страдание любит компанию.:)

При условии, что Вы создаете приложения для мира "Web 2.0", или это было бы столь же полезно/выгодно для *, ОТКЛОНЯЮТ & пользователи MacOS:

  • Палка с языками и компиляторами, которые предназначаются для как можно большего количества межплатформенных сред.
  • чистая.NET в Visual Studio лучше, чем Win32, очевидно, но разрабатывающий против библиотек MONO, возможно, с помощью Sharp Разрабатывает IDE, вероятно, еще лучший подход.
  • Вы могли также потратить свой Java изучения времени, и те навыки передадут очень хорошо программированию C# (плюс код Java, теоретически работал бы на любой платформе с соответствием JRE). Я услышал, что это сказало, что Java больше похож "на запись однажды, отладка везде", но это, вероятно, так же верно как (или даже moreso, чем) C#.
8
задан 10 revs, 4 users 31%unknown 27 November 2009 в 07:12
поделиться

1 ответ

Массивы в C - это просто непрерывная область памяти с указателем на их начало *. Таким образом, их объединение включает в себя:

  1. Найдите длину массивов A и B (вам, вероятно, потребуется знать количество элементов и размер каждого элемента)
  2. Выделение ( malloc ) новый массив C размером A + B.
  3. Скопируйте ( memcpy ) память из A в C,
  4. Скопируйте память из B в C + длину из A (см. 1).
  5. Вы также можете освободить ( освободить ) память для A и B.

Обратите внимание, что это дорогостоящая операция, но это основная теория. Если вы используете библиотеку, которая предоставляет некоторую абстракцию, вам может быть лучше. Если A и B более сложные, чем простой массив (например, отсортированные массивы), вам нужно будет выполнить более умное копирование, а затем шаги 3 и 4 (см .: как объединить два массива с разными значениями в один массив ).


  • Хотя для целей этого вопроса пояснение указателя будет достаточно, строго говоря (и для успокоения комментатора ниже): C имеет концепцию массива, который можно использовать без синтаксиса указателей. С точки зрения реализации, однако, массив C и непрерывная область памяти с указателем достаточно близки, они могут быть и часто используются взаимозаменяемо.
26
ответ дан 5 December 2019 в 06:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: