我有一个char*,我正在为它分配另一个char*.我想知道通过该指令会发生什么?
例如:
char* foo; // suppose it is initialized and defined
char* bar = foo // I am defining bar
调用赋值操作wrt值、内存等之后(foo和bar(会发生什么?
我是C的新手,对你们中的一些人来说,这可能是一个非常琐碎的问题。
假设我们初始化了两个指针来指向不同的字符串:
const char *foo = "abcd";
const char *bar = "efgh";
如果我们";draw";它们在记忆中的样子是这样的:
+------++--------+|foo|--->|"abcd"|+-----++--------++-----++--------+|条形图|--->|"efgh"|+-----++---------+
然后我们分配给bar
:
bar = foo;
然后它会变成这样:
+------++--------+|foo|-+->|"abcd"|+-----+|+--------+|+-----+|+--------+|条形图|-/|"efgh"|+-----++---------+
现在foo
和bar
都指向同一位置。
简而言之,这就是初始化的定义:
const char *bar = foo;
会的。
在char* bar = foo
中,= foo
在技术上是初始化,而不是赋值。初始化遵循许多分配规则。
由于foo
是指向char
的指针,并且您说它已经初始化,所以它有一个"值",它是对某个char
对象的引用(或空指针(。我们经常把这些值看作是计算机内存中的地址。初始化或赋值仅仅给bar
一个相同的值。
值用字节表示。因此,为了记录foo
的值,在存储器中为foo
保留了一些字节。要将bar
设置为相同的值,编译器所要做的就是将字节从foo
的内存复制到bar
的内存。