我正在以自学成才的方式学习C编程。我知道必须始终静态或动态地初始化数字指针地址。
但是,我还没有读到有关初始化char指针地址的强制要求。
例如,这段代码是正确的,还是需要指针地址初始化?
char *p_message;
*p_message = "Pointer";
答案 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)
不需要,但仍建议使用干净的编码风格。 你发布的代码也是完全错误的,不会起作用,但是你知道并只写了一个简单的例子,对吗?