C语言 指针声明等效性



char *charPtr = malloc(50);

char *charPtr; *charPtr = malloc(50);

我一直在用 C 创建指针,如上面的例子。可以说这两者在 C 中是相同的吗?

可以

说这两者在 C 中是相同的吗?

否,您需要初始化指针。

char *charPtr = malloc(50);  // initialization

或者,您先声明它,然后再分配它:

char *charPtr;  // declaration
charPtr = malloc(50);  // <-- assignment - do NOT add * here as the you already declared `charPtr` as a pointer

请注意,像您那样做(第 2 种情况(是错误的:

char *charPtr; 
*charPtr = malloc(50);  // <-- WRONG, the * here is deference operator

不,它们不一样。在这种情况下

char *charPtr;
*charPtr = malloc(50);

你是

  1. 取消引用未初始化的指针,这将导致未定义的行为
  2. 在不强制转换的情况下将指针分配给不同大小的整数。尽管从指针到整数的转换和其他方式是根据 c 标准定义的,但您应该考虑一些事项。如果此代码一直为您工作,那是因为上面提到的未定义行为。你永远不会知道它正在发生,直到一些不好的事情发生,这些事情可能一直发生,或者永远不会发生,或者有时,你真的永远不知道。

在第一种情况下,*在这里扮演着两个不同的角色

char *charPtr;

它只是指示charPtr是一个指针,而在

*charPtr = malloc(50);

它是取消引用运算符。

当然,*也是乘法运算符,但编译器对它的解释取决于它出现的上下文。

No.第一个声明charPtr为指向char的指针,它包含返回值 malloc

第二个声明charPtr为指向char的指针。然后它说charPtr指向的值应设置为 malloc 的返回值。这是错误的。指针是未初始化的,说出它应该指向什么是未定义的行为。此外,将void *分配给char应生成编译器诊断。

最新更新