char* 赋值有什么作用?

What does char* assignment do?

我有一个 char*,我正在为它分配另一个 char*。我想知道通过该指令会发生什么?

例如:

char* foo; // suppose it is initialized and defined

char* bar = foo // I am defining bar

在对值、内存等调用赋值操作后(对 foo 和 bar)会发生什么

我是 C 的新手,对于你们中的一些人来说可能是一个非常微不足道的问题。

假设我们有两个指针初始化为指向不同的字符串:

const char *foo = "abcd";
const char *bar = "efgh";

如果我们“画”出它们在记忆中的样子,它会是这样的:

+-----+      +--------+
| foo | ---> | "abcd" |
+-----+      +--------+

+-----+      +--------+
| bar | ---> | "efgh" |
+-----+      +--------+

然后我们赋值给bar:

bar = foo;

然后它看起来像这样:

+-----+      +--------+
| foo | -+-> | "abcd" |
+-----+  |   +--------+
         |
+-----+  |   +--------+
| bar | -/   | "efgh" |
+-----+      +--------+

现在 foobar 都指向同一个位置。

简而言之,初始化的定义如下:

const char *bar = foo;

会做。

char* bar = foo中,= foo在技术上是一个初始化,而不是赋值。初始化遵循许多赋值规则。

因为 foo 是指向 char 的指针,并且你说它已经被初始化,它有一个“值”是对某个 char 对象(或一个空指针)。我们通常将这些值视为计算机内存中的地址。初始化或赋值只是给 bar 相同的值。

值以字节表示。所以,为了记录foo的值,内存中有一些字节是为foo保留的。要将 bar 设置为相同的值,编译器所要做的就是将字节从 foo 的内存复制到 bar 的内存。