当我决定用C语言编写Chrome Dino时,我学到了什么新计算机





有关项目的一些信息



为了熟悉该语言,我决定编写一个小型应用程序chrome dino,它是熟悉的chrome恐龙的成功克隆。由于C语言中缺少类,所以我决定重新发明轮子:我将类的字段和方法放在结构中,构造函数是一个返回此结构的函数。内部字段和方法通过在其前面加上静态变量来隐藏。(关于此的几篇文章)

...



typedef struct Barrier {
    int width, height;
    int *picture;
    int x0, y0;
} Barrier;

Barrier* new_Barrier() {
  Barrier* barrier = NULL;
  barrier = malloc(sizeof(Barrier));

  return barrier;
}




[0, 1, 2, 3],

.

0 — ,

1 — ,

2 — ,

3 — .







, —



, , . .



, , .. .



要遍历一系列数据(一维数组),将获取第一个元素的地址,然后在循环中(步长=数据类型的大小),移动下一个地址。



int n = 10;
int step = sizeof(Barrier);
Barrier* barrier = malloc(step * n);

for (int i = 0; i < n; i += step) {
  *(barrier + i) = data;
}


在二维数组中实现对元素的搜索变得更加困难,因为整个数组都被写入顺序单元格,并且搜索必须由一行而不是矩阵执行。要连续搜索矩阵元素,可以使用以下公式:



一种[一世][Ĵ]=一世w+Ĵ





其中A是一个二维数组,

      i是行索引,

      j是列索引,

      w是嵌套数组A的长度(数组宽度)



很难找到三维数组的元素;要找到它,您需要使用以下公式:



[一世][Ĵ][ķ]=一世wH+Ĵw+ķ





其中B是三维矩阵,

      k是一系列二维矩阵的索引,

      h是嵌套数组B的长度(矩阵的高度)。



显然,要实现更多的数组嵌套工作,需要针对其元素的统一搜索算法:



C[一种1个][一种2].........[一种ñ]=一世=1个ñ一种一世大号一世--1个.........大号1个



其中C是n维数组,

      n是嵌套,

      一种一世 -第i个数组的索引,

      大号一世 -数组的长度i。



如果我们将计算机运算的数量作为纵坐标轴,并将嵌套作为横坐标轴,那么我们可以看到用于计算数组元素的运算数量如何随着嵌套的增加而增加。(求和和相乘是一次操作)。







记住记忆



. : , . .



c Barrier. , . , ( ). push ( ) ( ) , . .



int n = 10;
int step = sizeof(Barrier);
Barrier* barrier = malloc(step * n);

for (int i = 0; i < n; i += step) {
    *(barrier + i) = data;
}

n = 11;
free(barrier);
barrier = malloc(step * n);

for (int i = 0; i < n; i += step) {
    *(barrier + i) = data;
}


: , . (, ArrayList java), .





不是原始图元



在高级语言中,既有通过引用传递的数据类型,也有通过值传递的数据。但是要按值传递数据,您必须具有对变量的引用,即 是原始类型不是原始类型吗?在汇编器中,任何变量都存储对存储位置的引用以及存储在其中的值。每个变量都存储其单元格地址和值(该值也可以是另一个单元格的地址)。但是对存储单元地址的引用存储在哪里?事实证明,当编译器生成机器代码时,它会自动将所有变量名替换为其偏移量。这意味着每个变量都可以通过引用传递,但是在高级语言中,此功能对开发人员是隐藏的。





您可以在此处看到该项目



All Articles