CS61C | lecture2

# CS61C | lecture2

C 语言是一种编译语言。C 编译器将 C 程序映射到特定与体系结构的机器代码(实际上是一串 0 和 1)。
而 Java 会通过 JVM(Java 虚拟机) 将代码转换为独立于架构的字节码。
Python 则会直接解释代码。C 不会直接解释代码,而是将其编译成机器代码之后,CPU 直接解释并运行。

编译优点

C 的编译优势在于:
1.有很出色的运行性能,通常比 Python 和 Java 快。
2.编译的时候可以允许我们仅重新编译修改了的文件。

编译缺点

1.编译文件包括可执行文件是特定于体系结构的,也就是特定于 CPU 类型和操作系统类型。
2.编译过程通常是 编辑、编译、运行 的重复

类型转换

C 是一种弱类型语言。

结构对齐与填充

struct foo {
	int a;
	char b;
	struct foo *c;
}

这段代码在 32 位架构上:

字节
a4
b1
unused bytes3
c4
sizeof(struct foo)12
32 位计算机上的指针是 32 位,也就是 4 字节。

Unions

union 可以让元素共享存储空间。同时会占用空间最大的元素提供了充足的空间。

./foo hello 87
argv[0]“./foo”
argv[1]“hello”
argv[2]“87”
argv[3]null

指针

将内存视为一个很大的数组,每个元素有个地址并且存储这一定的值。

上图中,p 为指针,指向 x,所以要存储 x 的地址 104

传统在函数中传递参数是通过复制参数的方式,不会对原始变量进行改变。但通过传递引用的方式可以进行修改。

void addOne(int *p) {
	*p = *p + 1;
}

int main() {
	int y = 3;
	addOne(&y); /* y 将变成 4 */
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值