English 中文(简体)
利用小型住户创建点对点
原标题:Creating pointer-to-pointer using malloc
  • 时间:2009-10-06 10:46:25
  •  标签:

法典

char** p = (char **) malloc(sizeof(char **) * size); //Where size is some valid value.
p[1] = (char*) malloc(sizeof(char) * 30);

上述法典是否被罚款?

我的理解是:

p -> +---------+
     0 char*   + -> {c,o,d,e,}
     +---------+

     +---------+
     1 char*   + -> {t,o,a,d,} //The assignment of these values is not shown in the code.
     +---------+

因此,我们应写字。

char** p = (char **) malloc(sizeof(char *) * size);

我是否正确?

第[0]页是否意味着(第1页+1)第1页第1页将提到“返回”,因此“返回”?

最佳回答

作为一项一般规则,你在小型电话中度量之多,其程度应低于接收小型热点记忆的点。

例如:

char * p = malloc(sizeof(char) * somesize);

以及

char ** p = malloc(sizeof(char *) * somesize);
问题回答

是的,你基本上在此重新分配一系列小标题*,即尺寸<代码>>size.sizeof(char *), 确实应当加以使用,而不是使用sizeof(char **),但在实践中却取得了任何变化,因为点码总是相同。

页: 1

是的,没有。 正确的是,第一笔拨款应当使用<代码>sizeof(char * ),但由于点人和点人的规模相同,因此它赢得了一定数额。

p[0]在“代码”上指明了缓冲带,而p***则指“toad”。 该守则正在分配一系列点子,然后填充阵列的second部分,同时留下第一个未初步形成。

是的,鉴于您打算将<代码>*>char*储存起来,您应当<>。

在大多数情形下,<代码>sizeof(char **)将等于sizeof(char*,因此,最初的代码将同时运作,但你确实不依赖这种编号——它并非绝对可携带,这种代码令人混淆。

<代码>p[0]系指*(p + 0), not(*p + 1). p XVI/code>。

你是正确的。 应当:

char** p = (char**) malloc(sizeof(char*) * size);

关于你的最后一个问题,我没有这么说。 页: 1

是的,你应当写

char** p = (char **) malloc(sizeof(char *) * size);

但无,<代码>p[0]系指*(p + 0),p+0将指> so>>>

如果您希望“加入”,请使用<代码>p ***,即<代码>*(p+1)。

我总是这样做:

#include <stdlib.h>
pointer = malloc(ELEMENTS * sizeof *pointer);
/* check if pointer is NULL */

在你的情况下:

#include <stdlib.h>
char** p = malloc(sizeof *p * size); //Where size is some valid value.
/* check if p is NULL */
p[1] = malloc(sizeof *(p[1]) * 30);
/* check if p[1] is NULL */

<>说明: 在C,不应给小鼠带来回报价值! <代码> 避免* 完全可以被指定为任何其他点。 C++中可能有所不同。





相关问题