c - 为什么全局指针不能重新指向另一个对象,而局部指针可以?

标签 c pointers

我是 C 的新手,尤其是 C 指针的新手。这里的问题很简单:

#include <stdio.h>

char *p1 = "Hello";
char *p2;
p2 = "world";  // error: redefinition of 'p2' with a different type: 'int' vs 'char *'

int main()
{
   char *p3 = "Hello";
   char *p4;
   p4 = "world";  // OK!  p4 can re-point to somewhere
   
   return  0;
}
我声明了一个全局指针 p2 ,但我尝试分配一个字符串,"hello" ,到它。
但是QT提示错误:使用不同类型重新定义“p2”:“int”与“char *”
它说 p2int ?但我明确声明它是char * ;
然而,p4 ,作为本地指针,可以做同样的事情!一切正常 main功能。
这是怎么回事?我很困惑!

最佳答案

发生的事情是您无法在全局范围内运行代码。只允许使用静态初始值设定项,并且它们必须是编译时常量。
作品:

char *p2;
int main()
{
    p2 = "world";
}
在这种情况下,错误消息可能不是最有帮助的。唯一可以存在于全局范围内的是声明或定义(带有可选的初始值设定项),因此编译器认为 p2 = "world"正在申报 p2作为一个新变量,给它隐式类型 int ,然后看到与 p2 的声明冲突紧接上面并提示。

关于c - 为什么全局指针不能重新指向另一个对象,而局部指针可以?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64745876/

相关文章:

c++ - 什么时候使用空指针?

递归计算从(0,0)到(x,y)的格子路径数

c - 由于某些原因指针地址为NULL

c++ - Eclipse CDT 多线程调试不是最佳的 - 如何独占运行线程?

c - 解决GCC警告: "dereferencing type-punned pointer will break strict-aliasing rules" by temporary pointer

c - 指向变量与数组的外部指针

c - 错误不兼容的指针类型?

c++ - 从内存 C++ 中删除指针位置的项目?

c++ - 我不明白数组名称是如何指向数组的指针

c++ - 为什么输出不是预期的那样?