1

在我的理解中,

示例 1

cPtr = (char*)malloc(100);

示例 2

1 char c = 0;
2 char* cPtr = &c
3 cPtr = (char*)malloc(100);

在 Example1 中,malloc 创建了一个内存空间并返回分配内存的第一个地址块。所以 cPtr 在堆内得到一个任意地址。

在 Example2 的第 2 行中,cPtr 指向 c。所以 cPtr 的地址为 c。

此时,当你执行例 2 的第 3 行时,cPtr 的值是多少?它是否获得了我在示例 1 中提到的任意内存地址?或者,它是否保留 c 的地址并创建一个空格?

4

3 回答 3

3

它是否获得了我在示例 1 中提到的任意内存地址?

是的。该行只是覆盖了之前的值cPtr

或者,它是否保留 c 的地址并创建一个空格?

不,它不会“保留”任何东西。 cPtr被调用的返回值覆盖malloc(),它指向一些内存块,就像你的第一个例子一样。

第二个示例的第 1 行和第 2 行本质上是无操作的。

于 2013-10-09T17:25:54.900 回答
1

malloc返回成功可以的值initializechange指针的值。
在 Example1 中进行初始化,在 Example2 中更改 cPtr 的值。
这是两者之间的唯一区别。

于 2013-10-09T17:29:28.390 回答
1

关于 的值cPtr,在您的第二个示例中,第 3 行完全放弃了第 1 行和第 2 行的所有影响。即返回的值malloc简单地覆盖了 中的前一个值cPtr。因此,在第二个示例中,第 1 行和第 2 行对代码行为绝对没有影响。

换句话说,这两个示例都是 100% 等效的,第二个示例有两行额外的完全无关紧要(“死”)的代码。

于 2013-10-09T17:30:08.377 回答