C指针地址初始化是否必要?

时间:2013-09-01 15:44:12

标签: c pointers allocation memory-address

我正在以自学成才的方式学习C编程。我知道必须始终静态或动态地初始化数字指针地址。

但是,我还没有读到有关初始化char指针地址的强制要求。

例如,这段代码是正确的,还是需要指针地址初始化?

char *p_message;
*p_message = "Pointer";

3 个答案:

答案 0 :(得分:4)

初始化不是需要,无论指针指向何种类型。唯一的要求是你不得试图使用一个未初始化的指针(从未被分配过)用于任何事情。

但是,出于审美和维护原因,应尽可能初始化(即使只是NULL)。

答案 1 :(得分:1)

首先,char 是数字类型,因此您的问题中的区别没有意义。如上所述,您的示例代码甚至无法编译:

char *p_message;
*p_message = "Pointer";

第二行是约束违规,因为左侧有算术类型而右侧有指针类型(实际上,最初是数组类型,但在此上下文中它会衰减为指针类型)。如果你写了:

char *p_message;
p_message = "Pointer";

然后代码完全有效:它使p_message指向字符串文字。但是,这可能是您想要的,也可能不是。另一方面,如果你写了:

char *p_message;
*p_message = 'P';

char *p_message;
strcpy(p_message, "Pointer");

然后代码将调用未定义的行为(第一个例子)将*运算符应用于无效指针,或者(第二个例子)将无效指针传递给标准库函数,该函数需要一个有效指针一个能够存储正确数量的字符的对象。

答案 2 :(得分:0)

不需要,但仍建议使用干净的编码风格。 你发布的代码也是完全错误的,不会起作用,但是你知道并只写了一个简单的例子,对吗?