我有一个这样的结构:
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
来编辑tipoelem *pointerToInfo
字段是安全的还是最好在struct celda中将其声明为指针tipoelem *info
?编辑更多信息:
我想修改的方式是下一个,我不知道它是否安全。
abb a;
int main(){
tipoelem *ptr = a->info;
ptr->comp_lexico = 2;
}
最佳答案
是的,这样进出是安全的。
举个例子,
#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
作为输出在控制台上所以无论哪种方式都是完全可以的。
关于c - 指向结构内部变量的指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47304208/