像素是构成图像的最小彩色点。
如果我们将图像想象为由零和一组成,则零代表黑色,而一代表白色:
RGB (红、绿、蓝) 是代表每种颜色数量的数字。在 Adobe Photoshop 中,我们看到以下设置:
我们可以在上图中看到所选数量的红色、绿色和蓝色如何改变颜色。我们还可以在该图像中看到,颜色不仅仅由三个值表示,而是由特殊数字和符号组成的值表示。例如,值 255 表示为 FF。
十六进制数字系统是一种仅使用 16 个字符书写数字的数字系统。它们如下:
0 1 2 3 4 5 6 7 8 9 A B C D E F
在十六进制数字系统中,每列代表 16 个级别。
0 – 00 为
1 – 01 为
9 – 作为 09
10 – 作为 0A
15 – 作为 0F
16 – 10 为
255 表示为 FF,因为 16 x 15(或 F)等于 240 加 15 等于 255。这是可以用十六进制表示的最大两位数。
十六进制数字系统允许以更短的形式表达数据。因此,方便更紧凑地表达信息。
如果我们使用十六进制数字系统对内存块进行编号,我们可以将它们想象如下:
很难确定图中的块 10 代表的是内存位置还是值 10。因此,所有的十六进制数通常都用前缀 0x 来表示:
我们将值 50 赋给整型变量 n:
#include <stdio.h> int main(void) { int n = 50; printf("%i\n", n); }
程序如何将该值存储在内存中可以如下所示:
C 语言有以下内存操作运算符:
如果我们想知道第n个学习器的内存地址,我们可以将上面的代码更改如下:
0 1 2 3 4 5 6 7 8 9 A B C D E F
%p – 让您查看内存位置的地址。当我们运行代码时, &n 返回变量 n 在内存中以 0x 开头的地址。
指针是一个变量,存储该值在计算机内存中的地址。
#include <stdio.h> int main(void) { int n = 50; printf("%i\n", n); }
其中 p 是一个指针,包含整数 n 的地址。
指针通常存储为 8 字节值。 p 存储的是上图中值 50 的地址。
我们可以将指针视为从内存中的一个位置指向另一个位置的箭头:
String 只是一个字符数组。例如,字符串 s = "HI!" 在计算机内存中可以表示为:
名为s 的指针告诉编译器给定值的第一个字节位于何处:
我们可以创建一个字符串变量,如下所示:
#include <stdio.h> int main(void) { int n = 50; printf("%p\n", &n); }
上面的代码打印从位置 s 开始的字符数组。
字符串数据类型的变量值相互比较:
int n = 50; int *p = &n;
在上面的代码中,我们为变量 s 和 t 赋予相同的“Hi!”即使我们给出值“不同”,结果屏幕上也会显示消息。
为了找出发生这种情况的原因,我们可以为变量 s 和 t 赋予相同的值,并在计算机内存中表示它们,如下所示:
所以上面的代码实际上是在尝试比较变量 s 和 t 的内存位置,而不是它们的值。
给出以下代码:
#include <stdio.h> int main(void) { char *s = "HI!"; printf("%s\n", s); }在
string t = s中,s的地址被复制到t。这不会产生我们想要的结果,因为该值未被复制 - 仅复制其地址。
s 和 t 指向相同的内存块。我们无法将其值从 s 复制到 t,而是它们变成了指向单个字符串的两个指针。
malloc - 允许程序员分配一定大小的内存块。
free – 要求计算机释放之前分配的内存块。
我们更改代码以创建真实副本:
0 1 2 3 4 5 6 7 8 9 A B C D E F
malloc(strlen(s) 1) - 将变量 s 的长度加一并为其字符分配空间。然后,通过for循环,将s的值复制到t中。
如果我们向编译器请求一块内存,则不能保证该内存是空闲的。分配的内存可能已经被计算机使用过,因此有可能存在不需要的值:
#include <stdio.h> int main(void) { int n = 50; printf("%i\n", n); }
当我们运行这段代码时,为数组分配了 1024 个内存位置,但是当我们使用 for 循环显示数组元素的值时,我们发现并非所有的值都是 0。
每当我们要求计算机为变量分配内存时,最好将其初始化为 0 或其他值。
本文使用 CS50x 2024 源码。
以上是CS-第 4 周的详细内容。更多信息请关注PHP中文网其他相关文章!