При обучении C, лучше преподавать массивы прежде или после указателей? [закрытый]

Это действительно странное ограничение. Вы говорите «пожалуйста, поймите», но я не знаю, поэтому я думаю, что вы должны объяснить, почему. Это может помочь вам найти лучшее решение.

Проблема здесь двоякая:

1) Ваш родительский компонент фактически не отображает вашего ребенка, у вас просто есть div с id Child, который не имеет смысла в React.

2) Сценарию, в котором находится ваш родительский компонент, требуется каким-то образом доступ к дочернему компоненту, и без компоновщика модуля вам нужно будет поместить его в пространство имен, доступное для доступа, например window

) Вы рендеринг двух деревьев React. Чтобы передавать реквизиты из одного компонента в другой, они должны находиться в одном и том же дереве визуализации.

const Child = ({ name }) => {
    return (
        <div>{name}, I am the child component</main>
    );
};


window.Child = Child

-

const Child = window.Child

class Parent extends React.Component {
    render() {
        const name = "Giggles";

        return (
            <div>
                <Child name={name} />
            </div>
        );
    );
};

ReactDOM.render(
    React.createElement(Parent),
    document.querySelector('#Parent')
);
19
задан Joel Coehoorn 9 December 2011 в 18:32
поделиться

14 ответов

Я думаю, что лучший подход должен представить 1 понятие за один раз. Вы не должны к 100% объяснять массивы в первом модуле. Вы можете detangle почти что-либо путем представления 1 понятия за один раз.

я преподавал бы их в этом порядке: Массивы, Указатели, Arrays+Pointers, OtherStuff[N].

<час>

Массивы:

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

//The following doesn't need an understanding of pointers
int x[10];
x[0] = 5;
<час>

Указатели:

Тогда можно учить указателям и как они работают, начиная с некоторых простых примеров:

int y = 5;
int *p = &y;
*p = 6;
printf("%i\n", y);

Удостоверяются, что дали особое внимание, что указатель точно так же, как любая другая переменная. Это хранит адрес памяти.

нет никакой потребности войти в стек по сравнению с "кучей" просто все же.

<час>

Arrays+Pointers:

, Как выполнить итерации по массивам с указателями:

int x[10];
x[0] = 5;
x[1] = 6;
int *y = x;
printf("%i\n", *y);//prints the first element
y++;
printf("%i\n", *y);//prints the second element
<час>

Тогда можно преподавать более сложные вещи...

Всюду по всем примерам делают интенсивное использование sizeof и печатающих адресов. Это действительно помогает понять то, что продолжается.

34
ответ дан 30 November 2019 в 02:04
поделиться

Этот вопрос можно задать для любого объектно-ориентированного языка действительно.

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

0
ответ дан 30 November 2019 в 02:04
поделиться

Я думаю, что это был бы лучший запуск с массивами, потому что понятие массива просто и интуитивно, но в C это были бы важные пересматривающие массивы после того, как преподают ponters, как 'Легион', предложенный прежде.

0
ответ дан 30 November 2019 в 02:04
поделиться

Вы преподавали бы указатели перед строками?

, Вероятно, нет. И большинство тех же аргументов применяется.

(Но обычно я соглашаюсь с @legion — не сверхдумайте это.)

0
ответ дан 30 November 2019 в 02:04
поделиться

Зависит, что они знают. Вы преподаете C или programming-C?

я видел очень мало успеха с последним. C является просто не очень интуитивным или прощающим языком. Я не видел студентов, благодарный за запуск с него, хотя я видел студентов, расстроенных программированием для него.

Те, кто собирается придерживаться программирования, выйдут и изучат C в их свободное время, так или иначе. Нет никакой потребности продвинуть его на них сначала.

, Если Вы просто преподаете C, и они уже знают указатели и массивы, затем преподавая, как указатели и работа массивов в C могут быть сделаны на одном уроке.

0
ответ дан 30 November 2019 в 02:04
поделиться

Как указано выше я не думаю, что порядок важен, но это - порядок, я желал, чтобы кто-то имел, показал мне материал.

  1. Массивы
  2. Указатели
  3. , Как Массивы и Указатели - тот же
  4. , Почему Массивы и Указатели не тот же

Для большего количества информации о точке 4, я действительно рекомендую главу 4 "Шокирующая истина: C массивы и Указатели НЕ Являются Тем же!" в "Эксперте C, глубокие секреты C".

<час>/Johan

Обновление :

Некоторые ссылки на книгу, и существует также предварительный просмотр книги. http://books.google.se - Эксперт C, глубокие секреты C

И комментарии пользователей об этой книге верны: http://www.amazon.co.uk/Expert-Programming-Peter-van-Linden/dp/0131774298

1
ответ дан 30 November 2019 в 02:04
поделиться

Если они были представлены ассемблеру заранее, преподавайте указатели сначала.

, Если они были представлены высокоуровневым языкам (т.е. примерно что-либо) преподают массивы сначала.

, По моему опыту, люди, приезжающие в C без некоторого воздействия программированию уровня ассемблера (регистры, адреса, "компьютерные основные принципы"), собираются ввести мир боли. По моему скромному мнению, Вы - на самом деле более обеспеченный обучающий уровень ассемблера, кодирующий сначала, затем представляя C как лучший ассемблер.

1
ответ дан 30 November 2019 в 02:04
поделиться

Я предполагаю, что Вы преподаете C студентам, которые уже знают, как программировать на другом языке как Java (или назад в мое время, Паскаль). Я не думаю, что C является хорошим языком для использования для того, чтобы учить программирование завершить новичков.

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

2
ответ дан 30 November 2019 в 02:04
поделиться

Им нужно преподавать одновременно.

пример единственного размерного массива, получаемого доступ, поскольку, указатель на основу со смещением (размер шрифта * индекс) должен сделать появление.

т.е.

a[i] is equivalent to *(a + i)
2
ответ дан 30 November 2019 в 02:04
поделиться

Необходимо преподавать массивы сначала, потому что они существуют почти на любом другом языке и легче понять. Указатели или некоторые аспекты указателей, основываются на том, что стало известно о массивах. Это - органический порядок, по моему скромному мнению, и как я изучил это путь назад когда.

8
ответ дан 30 November 2019 в 02:04
поделиться

Я преподавал бы указатели сначала. Они могут быть объяснены, не преподавая массивы. При обучении массивов я мог тогда обратиться к указателям при объяснении выражения a[i], и при объяснении, как можно передать их функциям.

9
ответ дан 30 November 2019 в 02:04
поделиться

Не сверхдумайте вещи.

Обучение этих понятий максимально ясно и привлекательно является FAR, более важным, чем, какой порядок Вы выполняете в них.

я предложил бы затронуть основы массивов сначала, и сделать указатели и пересмотреть массивы (более полно на этот раз) позже.

8
ответ дан 30 November 2019 в 02:04
поделиться

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

2
ответ дан 30 November 2019 в 02:04
поделиться

Интересный вопрос - надеюсь, еще не поздно ответить.

Когда я преподавал программирование в Бостонском колледже в начале 80-х мы с коллегами каждый год боролись с этими проблемами, и мы постоянно корректировали наш подход. Тогда C был новым языком, поэтому мы пошли дальше от Basic до Pascal. Я помню, как думал в то время о том, как трудно было бы преподавать C только потому, что он был более расплывчатым, у студентов было больше возможностей ошибиться и более запутанными вещами, такими как различие между массивами и указателями, которые вам приходилось учить .

Что я нашел наиболее полезным, так это попытаться быть конкретным, а не абстрактным. Например, во вводном курсе программирования я использовал интерпретатор для простого десятичного компьютера, который вы могли бы программировать на нем ». s десятичный «машинный язык». У него были адреса от 0 до 999 и коды операций вроде 1234, где «1» означало «добавить в аккумулятор», а «234» - это адрес, по которому нужно найти число для добавления. Студенты писали действительно простые программы, например, складывали список чисел, и они выполняли их пошагово, наблюдая, что происходит на каждом шаге.

Я бы попросил их поиграть с этим около 3 недель, а затем начать БАЗОВЫЙ. Во втором курсе они перейдут на Паскаль. Этот маленький десятичный «компьютер» смог передать некоторые конкретные концепции, которые делают «абстракции» в «реальных» языках намного более понятными, например:

  • Что такое память, какие адреса и как данные а программы - это просто числа по адресам в памяти. Это значительно упрощает объяснение понятий «переменная», «массив» и «указатель» позже.
  • Как базовая модель вычислений состоит в том, что очень простые шаги выполняются последовательно, и перед каждым шагом может начаться предыдущий нужно закончить. Я знаю, что люди будут возражать против того, что в настоящее время компьютеры сильно распараллелены и конвейерны, но я должен объяснить, что вам нужно начать очень просто, потому что, когда новички видят, что программа запущена, она выглядит для всего мира так, будто делает все сразу, и читает ваш разум в процессе.
  • Как, объединив очень маленький словарь инструкций, включая прыжки и условные прыжки, вы можете заставить компьютер делать почти все, что вы хотите.

Теперь, что касается C, I ' я слышал, что его пренебрегают, считая его просто на голову выше ассемблера, но я думаю, это хорошо. Он всегда поражал меня как язык экспертов для экспертов. Я думаю, что идеи массивов, указателей и структур очень легко объяснить, если вы можете просто вернуться к базовой машине. То же самое для C ++ и объектно-ориентированного программирования.

Итак, подведем итог: если студенты понимают основную концепцию того, как работают компьютеры, даже если это действительно искусственный компьютер, то объяснять концепции структуры данных более высокого уровня будет намного проще.

1128557]

1
ответ дан 30 November 2019 в 02:04
поделиться
Другие вопросы по тегам:

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