全局字符指针(C编程)

时间:2015-10-29 23:06:54

标签: c pointers struct

我刚刚开始通过创建小程序来学习C语言。

现在,我正在创建一个需要struct或者全局的程序,因为稍后在我的函数中的某个地方我只想直接调用它们。

我不喜欢使用struct,因为我担心它会增加seg的几率。在代码行之间的错误。

我的问题是:这两个是否相同?

struct myTrialStruct{
    char *trialOne;
    char *trialTwo;
    char *trialThree;
};

extern char *trialOne;
extern char *trialTwo;
extern char *trialThree;

char *trialOne;
char *trialTwo;
char *trialThree;

如果没有,有人可以告诉我创建全局字符指针的正确方法而不需要创建 struct 吗?

2 个答案:

答案 0 :(得分:4)

如果变量构成对象,则应使用struct。如果他们这样做:

struct myTrialStruct{
    char *trialOne;
    char *trialTwo;
    char *trialThree;
} myGlobalVar;

只需在源文件的顶部写下即可。 myGlobalVarstruct myTrialStruct类型的全局变量。

或者,如果三个变量是序列的一部分,则使用数组:

char *myGlobalArr[3];  // array of char *

使用struct不会增加段错误的可能性;粗心的指针会。

并尝试限制全局变量的使用。您的代码将变得非常混乱,并且修复错误将更加困难。

答案 1 :(得分:4)

如果你有一个编译单元,那么将这些声明放在任何函数之外就足够了。

char *trialOne;
char *trialTwo;
char *trialThree;

如果您要使用几个可以访问这些指针的编译单元,那么您应该将这些声明放在标题中

extern char *trialOne;
extern char *trialTwo;
extern char *trialThree;

并在某些模块中放置指针的这些定义

char *trialOne;
char *trialTwo;
char *trialThree;

标题应包含在需要访问这些指针的任何编译单元中。

关于你的问题

  

这两个是否相同?

然后这些

struct myTrialStruct{
    char *trialOne;
    char *trialTwo;
    char *trialThree;
};

一个类型声明,它是一个结构声明,没有创建对象。

虽然这些是对象声明

char *trialOne;
char *trialTwo;
char *trialThree;

您可以定义结构类型的对象,例如以下方式

struct myTrialStruct{
    char *trialOne;
    char *trialTwo;
    char *trialThree;
};

struct myTrialStruct hlobal_pointers;