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" |
+-----+ +--------+
现在 foo
和 bar
都指向同一个位置。
简而言之,初始化的定义如下:
const char *bar = foo;
会做。
在char* bar = foo
中,= foo
在技术上是一个初始化,而不是赋值。初始化遵循许多赋值规则。
因为 foo
是指向 char
的指针,并且你说它已经被初始化,它有一个“值”是对某个 char
对象(或一个空指针)。我们通常将这些值视为计算机内存中的地址。初始化或赋值只是给 bar
相同的值。
值以字节表示。所以,为了记录foo
的值,内存中有一些字节是为foo
保留的。要将 bar
设置为相同的值,编译器所要做的就是将字节从 foo
的内存复制到 bar
的内存。
我有一个 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" | +-----+ +--------+
现在 foo
和 bar
都指向同一个位置。
简而言之,初始化的定义如下:
const char *bar = foo;
会做。
在char* bar = foo
中,= foo
在技术上是一个初始化,而不是赋值。初始化遵循许多赋值规则。
因为 foo
是指向 char
的指针,并且你说它已经被初始化,它有一个“值”是对某个 char
对象(或一个空指针)。我们通常将这些值视为计算机内存中的地址。初始化或赋值只是给 bar
相同的值。
值以字节表示。所以,为了记录foo
的值,内存中有一些字节是为foo
保留的。要将 bar
设置为相同的值,编译器所要做的就是将字节从 foo
的内存复制到 bar
的内存。