You Never Walk Alone
CS61C lab00 & lab01 配置+学习笔记
CS61C lab00 & lab01 配置+学习笔记

CS61C lab00 & lab01 配置+学习笔记

lab00

一.在github上设置仓库

1.导入61C仓库。

2.填写61C的URL 点击后面这个链接查看URL61c-teach/fa24-lab-starter 然后填写自己仓库的名称。

lab指导网站:Home | CS 61C Fall 2024

3.进入gitbash,把自己仓库的文件克隆下来 git clone 自己仓库的URL
(打开文件可以在本地中使用自己喜欢的IDE打开项目, 我的是pycharm)。

二.lab00提交操作

1.在pycharm修改完代码后(如图)进入gitbash,向仓库提交。

2.输入命令git add .

3.然后再输入git status查看当前文件指针状态。

4.指示修改成功,然后输入 git commit -m “你的修改”

5.然后再次查看状态 git status (它提示你用git push提交本次修改)。

6.输入 git push将修改上传到github仓库 (如果你出现这些错误,就说明你没有科学上网。但是我做了许多提交,经验之谈ipv6也是有可能上传成功的。多提交几次就好了。)

7.提交成功。

三.检查是否提交成功

在github里面选择自己的仓库,找到刚刚修改的文件,点进去就可以看到文件内容。

lab01

一.编译和运行C程序

1.使用gcc编译程序 在lab01目录输入 gcc ex1_hello.c 这将.c文件编译为名为a.exe的可执行文件(这里和61C官方文档不同的原因:在Windows中默认生成可执行文件扩展名是.exe,在类Unix系统中常显示为.out)。

2.执行文件使用命令 ./a.exe

3.做项目的时候肯定不止一个可执行文件,所以我们不希望所有文件都叫a.exe
这就需要gcc -o 文件名 .c的文件名 这里是:gcc -o ex1_hello ex1_hello.c

4.用自己的编辑器编辑这个文件 把打印内容world改成61C保存,但不要编译。
使用./ex1_hello运行可执行文件,仍看到还是Hello World。因为没有编译。

5.现在用gcc -o ex1_hello ex1_hello.c重新编译程序。然后运行可执行文件就能看到更改

二.练习二指针

C语言中通过使用指针的解引用来改变指针指向变量的值。这是基础内容,不会的话可以去搜相关教学视频

唯一需要注意的一点是,使用刚才所用的指令进行编译和输出检查。熟练使用指令有利无害

三.练习三数组

看题目给我们的要求,是要我们查看数组首元和第二元的地址并且为第二元赋值

填写完毕以后,经过编译,输出得到地址。观察首元尾部地址和第二元尾部地址C和E

相差了16位 我们用int8_t 也就是8位,恰好是两个字节的长度。

四.练习四指针计算

原理和练习三差不多。练习四存在的目的和练习三差不多

首元尾部8 第二元尾部C 相差32位也就是4个字节 一个int16_t为16位

值得注意的是执行指针算术时,C 会自动考虑指针的类型并添加正确的字节数。例如,如果您编写 ptr + 5,C 不会总是将 5 添加到 ptr。相反,C 将添加 ptr 指向的数据类型大小的 5 倍。如果 ptr 是 int*,并且 ints 在内存中占用 4 个字节,则 ptr + 5 将 20 添加到 ptr 中保存的地址。

可以看到我在后面+5以后希望地址变更16*5=80个位,地址变为Ox16 Ox(16-C) = 10 10*8 = 80这时候发现

噢,原来教授真没骗我!

五.练习五字符串

我在这里犯了两个错误(太久不写C)你知道是什么吗?

善良的你一定不愿意指出我的错误,但即便如此我还是承认并修正我的错误

第一个错误是数组溢出。大小为5的数组,使用下标为5的元素会导致溢出

第二个错误是\0符和NULL不一样 \0是一个字符,ASCII码为0的字符;NULL则是一个宏,代表一个空指针

修改错误以后就好了 拼接字符串的时候,细节就是把第一个字符串的终止符改为空格并计算第一个字符串尾字符的偏移量

六.练习六strcpy

根据文档操作会得到段错误

暂停实验,谈谈个人感想

为了调动学生积极性而设置的欲擒故纵的”技俩“,希望国内教师也学一学这种教学手段。。。洋人的实验是给详细步骤,引导学生在实操与质询中适应知识和操作。国内学校都是给你简略的目标“解决…的问题,使用…的数据结构”然后扑哧一下给你一个文件让你输入。说白了这个教学方式对高手来说是浪费时间,对基础不牢的同学又是一种浩劫。往重了点讲,这就是国家失去许许多多相关技术人才的一个原因。但也不能去怪教师,因为整个教育闭环已经足够折磨一个人在学生时期的热情,为了求生而入职教师无可厚非。可我也想教育界能涌现出那么一批“圣人”,真的能把洋人思想引进革新。可惜肉食者鄙,纵观国内中化洋人教育的举措,都是经济中化、剥削中化而语言西化,真是驴头不对马嘴,取其糟粕。

继续实验吧!

此处我的strncpy复制6个字符,导致message中最后一个字符不是\0,会往后读取意料之外的内容(这里是@@)直到找到\0。
改为5后即可不改变message的长度复制。

七.练习七structs

当你正确完成了这个练习(这里不提供源代码)

将会得到如下结果

延申小知识

int一般4个字节, char*字符指针一般为4或8个字节(取决于计算机)

为什么是16个字符呢?在 C 语言中,结构体的大小需要遵守内存对齐的规则。为了提高性能,编译器通常会将数据对齐到特定的边界。

在 64 位系统上,通常会要求 8 字节对齐。我的电脑是64位系统,int被对齐为8字节,8+8=16

到这里lab01就结束了 C语言基础部分就差不多这些内容。其他更多内存操作应是cs50的内容,这里61c的C语言部分我认为是复习用的,简单的代码实现也是为后面课程内容服务。


Please follow and like us:
Follow by Email
SOCIALICON
SOCIALICON
SOCIALICON

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注