我刚刚开始通过创建小程序来学习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 吗?
答案 0 :(得分:4)
如果变量构成对象,则应使用struct
。如果他们这样做:
struct myTrialStruct{
char *trialOne;
char *trialTwo;
char *trialThree;
} myGlobalVar;
只需在源文件的顶部写下即可。 myGlobalVar
是struct 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;