C语言结构体存储问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言结构体存储问题相关的知识,希望对你有一定的参考价值。
自定义了一个放有很多参数的结构体struct snmp_seq,变量sp
struct snmp_seq
int get_snmp[BUFFER_SIZE];
int total_length;
int version;//版本号
int community[BUFFER_SIZE];//团体关键字
int command;//PUD类型
int reqid[BUFFER_SIZE];//请求标识
int errstat;//错误状态
int errindex;//错误索引
int pdu_type_start;
int errorstatus_start;
int errorIndex_start;
int oid_value_start;
int varbing_start;
struct variable_list//绑定变量
int oid_name[BUFFER_SIZE];//OID值
int oid_len;//OID长度
int value_type;//变量值的类型
int value_len;//变量值的长度
int oid_value;//变量值的值
val;
sp;
function1(sp, WORK,len,fd);
调用函数,将结构体变量sp带入,对WORK进行处理,将处理的结果在函数function1中,通过sp.xxxx赋值。
如果function1函数结束返回,那结构体struct snmp_seq中的赋值就都会消失,
我如何在function1中开辟存储空间去存储,之后在另一个函数中能对这个存储结构进行调用呢?
你最好重写你的function1,因为你function1(sp, WORK,len,fd);
这样调用函数时参数都是值传递,也就是相当于把sp中的参数值复制了一份给function1使用,函数执行完退出后,这些值的空间也就被释放了,所以sp中的值没有改变。你可以这样写:
int oid_name[BUFFER_SIZE];//OID值
int oid_len;//OID长度
int value_type;//变量值的类型
int value_len;//变量值的长度
int oid_value;//变量值的值
variable_list_t;
typedef struct
int get_snmp[BUFFER_SIZE];
int total_length;
int version;//版本号
int community[BUFFER_SIZE];//团体关键字
int command;//PUD类型
int reqid[BUFFER_SIZE];//请求标识
int errstat;//错误状态
int errindex;//错误索引
int pdu_type_start;
int errorstatus_start;
int errorIndex_start;
int oid_value_start;
int varbing_start;
variable_list_t val;
SNMP_t;
void main(void)
SNMP_t sp;
function1(&sp, WORK,len,fd);
function1(SNMP_t* snmp, WorkType work, int len, int fd)
snmp->total_length=work.xxx;
...
不知道你能看懂这段代码吗?其实最核心的问题是你要想在函数退出后改变函数参数的值,就必须使用地址传递
typedef struct
...
snmp_seq;
snmp_seq sp;
然后再function1里直接对变量sp操作,如sp.xxx= xxx;
函数运行完,变量赋值保存;追问
这样也没有对赋值的结构进行保存啊?您能说得再详细点吗?
追答这个结构体定义的是全局变量,会有保存,function1(WORK,len,fd); 可以不带sp参数
以上是关于C语言结构体存储问题的主要内容,如果未能解决你的问题,请参考以下文章