C 指向结构内部变量的指针
我有一个这样的结构:C 指向结构内部变量的指针,c,pointers,struct,C,Pointers,Struct,我有一个这样的结构: 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; 然后我定义
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)
问题是,使用来自程序其他部分的tipoelem*pointerToInfo
编辑tipoelem*info
字段安全吗,还是最好在结构celda中将其声明为指针tipoelem*info
编辑了更多信息:
我想修改tipoelem info
的方式是下一种,我不知道它是否安全
abb a;
int main(){
tipoelem *ptr = a->info;
ptr->comp_lexico = 2;
}
我定义了一个全局变量abb
它不是一个变量,而是一个类型
作为编辑后问题的答案:- 现在,您可以使用abb,作为类似于
struct celda*
的类型
编辑之后,答案就是问题所要求的
例如:
如果需要struct celda
的每个实例包含一个块信息,那么最好在结构中允许一个指向它的指针。在设计方面,这是一件更好的事情,因为密切相关的数据保存得很好
另一件事是假设在结构变量外部保留一个指向tipoelem
的指针。然后假设一段时间后,您需要另一个指向tipoelem
的指针,那么指向tipoelem
的这两个指针的含义不同。这就是为什么最好保持结构 要使用abb类型的变量访问int-inside-info,我将使用以下main:
#include <stdio.h>
void main(){
abb variable;
printf("comp_lexico es %d",variable->info.comp_lexico);
}
#包括
void main(){
abb变量;
printf(“comp_词典%d”,变量->info.comp_词典);
}
是的,这样访问是安全的。
考虑这个例子,
#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);
}
作为输出
类似地,您可以修改struct-tipoelem
的成员,例如comp\u-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);
}
在控制台上作为输出。因此,无论采用哪种方式都完全可以。你能重新表述一下吗,这个问题很难理解;你想写哪一段代码?你认为这段代码中哪里有问题?不要通过typedef
@OznOg隐藏指针,用更多信息编辑,这有点不同。我想做的是编辑对象一,它有ptOne=&(pTwo->objectOne)
,然后是ptOne->c='H'
。我不知道这是否安全。
#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