char ch = 'c';
这是一个 C 命令,它(内部)保留 1 个字节来在其中存储/保存字符“c”,在(对于用户)未知的内存位置(如果应用程序正在运行,那么在内存中的一个位置,应用程序在执行之前保留)。
char *char_ptr = &ch;
这是一个命令,即:
声明一个字符(char)的“数组”,用星号指示为指针,1a。此“指针”变量的大小具有用户 CPU 带宽的大小(32 位操作系统下的用户长度为 4 字节,64 位操作系统下的用户长度为 8 字节。这是默认大小.
使用 ampsign &,您引用了一个内存位置 - 它将指向“ch”,您通过char ch = 'c' 给出的命令;
注意:这是一个参考,没有指针!因此,内存值“c”不会改变。因此,您可以获得未定义的易碎/行为,因为您“保留”了 ch 仅一个字节,并且应用程序愿意在良好的操作系统上记住这一点,应用程序崩溃。这有背景,您引用“内存”位置,这部分内存将受到应用程序操作系统的保护。如果运气好的话,_ptr 的大小与你的计算机 cpu 拱门相同。如果运气好,操作系统会将ch的一个字节复制到_ptr地址的位置。
*(char_ptr+1) = 'h';
使用此命令,您“获取” _ptr 的地址,左 1 字节(从 0 开始计数),并将字符“h”分配给该位置,并覆盖 4 字节大小的 _ptr(32 位 cpu )。这使得结果“cxxx”变为“chxx” - xxx 代表随机字节。
*(char_ptr+2) = '\0';
这里也一样:你“获取”_ptr 的地址,然后向右跳 2 个字节(从 0 开始计数),并将字符 'h' 分配到这个位置,并覆盖 4 字节大小的 _ptr 的内容(32-位CPU)。这使得结果“chxx”变为“ch\0x”。这意味着,您形成了一个文字/字符串,即以空字符结尾的字符表示,用于将字符串标记为在该位置结束。
printf("char_ptr as string = %s\n", char_ptr);
这会在屏幕上的内存地址打印 char_ptr 中的 _ptr(字符串)值。因为你有文字“ch\0x”;您将看到提供了命令序列 \n 的字符串“ch”,并以“换行符”作为结果开始。