微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么全局指针无法重新指向另一个对象,而本地指针却可以呢?

如何解决为什么全局指针无法重新指向另一个对象,而本地指针却可以呢?

我是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为新变量,并为其提供隐式类型{{ 1}},然后发现与上面int的声明冲突并抱怨。

,

在这种情况下,指令(如赋值)只能存在于函数中。在函数之外,您只能声明或定义变量,类型或其他函数。

因此,当您在函数外说p2 = "world";时,编译器会通过消除过程假设您必须声明一个变量,并且由于您没有给它指定类型,所以它假设您的意思是{{1 }}。因此,您编写的代码等效于:

int

这时很明显,为什么它告诉您将char *p1 = "Hello"; char *p2; int p2 = "world"; // error: redefinition of 'p2' with a different type: 'int' vs 'char *' 重新定义为p2

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。