在教C时,在指针之前或之后教导数组会更好吗?

Uri*_*Uri 19 c arrays pointers

对于那些有课程开发经验的人:关于数组的最佳策略是什么?

我见过一些学校在变量和控制结构之后教授数组,甚至在教学功能之前.这允许教授一些基本的算法等.然而,它带来了如何将数组传递给函数的问题,因此有必要回到数组指针教授和补丁.

另一个选择是从变量和控制结构转到函数,然后教指针,一旦你有指针,从头开始教数组,然后使用它来获得动态内存分配.

对我来说第二个选项更有意义,因为与简单变量不同,使用数组很容易"走出界限",但是尚未了解内存和指针的学生可能无法理解这些界限之外的内容.

但是,我很想知道其他人的想法.

Bri*_*ndy 34

我认为最好的方法是一次引入1个概念.您不需要在第一个模块中100%解释数组.您可以通过一次引入1个概念来解决几乎任何问题.

我会按顺序教他们:数组,指针,数组+指针,OtherStuff [N].


阵列:

您可以先教授简单数组,这样他们就能理解从单个变量名访问多个数据槽的能力.

//The following doesn't need an understanding of pointers
int x[10];
x[0] = 5;
Run Code Online (Sandbox Code Playgroud)

指针:

然后,您可以通过一些简单的示例开始教授指针及其工作原理:

int y = 5;
int *p = &y;
*p = 6;
printf("%i\n", y);
Run Code Online (Sandbox Code Playgroud)

确保特别强调指针就像任何其他变量一样.它存储一个内存地址.

目前还没有必要进入堆栈与堆.


数组指针+:

如何使用指针迭代数组:

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
Run Code Online (Sandbox Code Playgroud)

然后你可以教更复杂的东西......

在所有示例中,大量使用sizeof和打印地址.这真的有助于了解正在发生的事情.

  • 对于高级主题,多维数组可能很有用.关于将2D结构表示为具有显式2D索引的"int**arr"或具有手动索引的"int*arr"的权衡可以在学生准备好时有所帮助. (2认同)

Joh*_*itb 9

我会先教指针.可以在不教授数组的情况下解释它们 在教授数组时,我可以在解释表达式时引用指针a[i],并解释如何将它们传递给函数.


Leg*_*ion 8

不要过分思考.

尽可能清晰,有吸引力地教授这些概念远比你做它们的顺序更重要.

我建议先介绍一下数组的基础知识,然后再做一些指针和重新访问数组(这次更充分).


cdo*_*ner 8

您应该首先教授数组,因为它们几乎存在于任何其他语言中,并且更容易理解.指针或指针的某些方面建立在有关数组的基础上.这是有机秩序,imho,以及我在以后学习它的方式.