我有这样的结构:
typedef struct{
char *lexema;
int comp_lexico;
union{
double v;
double (*fnctptr)();
} valor;
}tipoelem;
struct celda {
tipoelem info;
struct celda *izq, *der;
};
typedef struct celda * abb;
然后我定义了一个全局变量abb
,它具有全局范围。如果我以某种方式得到celda
字段信息的内存方向,我是否能够安全地修改它?或者最好将字段定义为tipoelem
指针,例如(tipoelem *info)
?
问题是,从prrogram的其他部分编辑带有tipoelem info
的{{1}}字段是否安全,或者最好将其声明为结构中的指针tipoelem *pointerToInfo
celda?
编辑了更多信息:
我想修改tipoelem *info
的方式是下一个,我不知道它是否安全。
tipoelem info
答案 0 :(得分:0)
我定义了一个全局变量abb,
它不是变量,而是type
。
作为编辑后问题的答案: -
现在,您可以将abb
用作与struct celda*
类似的类型。
编辑后答案就是问题所在。
例如:
如果需要struct celda
的每个实例来包含块信息,那么最好在structure
内允许指向它的指针。在设计方面,这是一个更好的事情,密切相关的数据保持紧密。
另一件事是假设你在结构变量之外保留一个指向tipoelem
的指针。然后假设在一段时间后你需要另一个指向tipoelem
的指针,那么这两个指向tipoelem
的指针的含义是不同的。这就是保持结构更好的原因。
答案 1 :(得分:0)
要使用 type abb 的变量访问 int 内部信息,我会使用此主要内容:
#include <stdio.h>
void main(){
abb variable;
printf("comp_lexico es %d",variable->info.comp_lexico);
}
答案 2 :(得分:0)
是的,这样访问是安全的。 考虑这个例子,
#include<stdio.h>
struct stOne {
int a;
int b;
char c;
};
struct stTwo {
struct stOne ObjectOne;
struct sttwo *pTwo;
};
struct stOne *pOne;
struct stTwo *pTwo;
struct stTwo ObjectstTwo;
int main() {
pTwo = &ObjectstTwo;
pTwo->ObjectOne.c = 'H';
printf("%c", ObjectstTwo.ObjectOne.c);
pOne = &pTwo->ObjectOne;
pOne->c = 'D';
printf(" %c", ObjectstTwo.ObjectOne.c);
}
此代码打印
H
作为输出。
同样,您可以修改struct tipoelem
的成员,例如comp_lexico
int
。
struct celda objectCelda;
//Assuming abb is a pointer, Make abb point to an object
abb = &objectCelda;
//Modify the value of comp_lexico
abb->info.comp_lexico = 0xAA;
现在更改代码,
#include<stdio.h>
struct stOne {
int a;
int b;
char c;
};
struct stTwo {
struct stOne ObjectOne;
struct sttwo *pTwo;
};
struct stOne *pOne;
struct stTwo *pTwo;
struct stTwo ObjectstTwo;
int main() {
pTwo = &ObjectstTwo;
pTwo->ObjectOne.c = 'H';
printf("%c", ObjectstTwo.ObjectOne.c);
pOne = &pTwo->ObjectOne;
pOne->c = 'D';
printf(" %c", ObjectstTwo.ObjectOne.c);
}
打印
H D
在控制台上作为输出。所以无论如何都可以这样做。