c语言结构体问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言结构体问题相关的知识,希望对你有一定的参考价值。

若有定义:struct

int a;
int b;

c[2]=10,100,20,200,*p=c;
则表达式++p->a的值为:__ ,表达式(++p)->a的值为__,表达式++(p->a)的值为__。
答案是多少。。这里有括号没括号有啥差别。。还有++在前和在后有啥差别。。大神求救。。

首先,下标[],圆括号(),箭头-> ,点 . 这四个是第一优先级的,所以在运算中是先计算这四个的计算;
第一个,p->a是一个整体,等于10,++p的返回值是+1后的值,即为11
第二个,括号优先(++p) ,++p指向c[1],即是 20,200,所以等于20
第三个,同第一个,返回值为11
参考技术A 这段语句事实上已经定义了一个link结构体的实例a,所以a是有地址的。结构体link中可以自包含一个link类型的指针,所以a.p=&a当然也就成立了。
这样可以么?
参考技术B 回答

先定义一个结构体Student,它包含四个成员:学号(number)、姓名(name)、电话(telphone)、地址(address),然后定义一个结构体数组stu[3],输入3个学生的数据,再输出。运行结果如下图所示,请编程实现相应功能。我的程序如下:(想修改一下用stu[3]定义,不知道怎么定义,用的是student1,student2,student3) 求指点。。#includevoid main()struct studentint number;char name[20];int telphone;char address[20];student1,student2,student3;printf("请输入第1个学生的信息:\\n");scanf("%d%s%d%s",&student1.number,student1.name,&student1.telphone,student1.address);printf("\\n");printf("请输入第2个学生的信息:\\n");scanf("%d%s%d%s",&student2.number,student2.name,&student2.telphone,student2.address);printf("\\n");printf("请输入第3个学生的信息:\\n");scanf("%d%s%d%s",&student3.number,student3.name,&student3.telphone,student3.address);printf("\\n");printf("学生信息如下:\\n");printf("student num:%d name:%s telphone:%d address:%s \\n",student1.number,student1.name,student1.telphone,student1.address);printf("student num:%d name:%s telphone:%d address:%s \\n",student2.number,student2.name,student2.telphone,student2.address);printf("student

希望可以帮到你

提问

学生的信息要连续输入如

1 Li 99

2 Shi 78

3 Wei 92

这样子呢?

回答

运行过了。OK的#include#include#include void input(void);//要声明struct studentchar name[20];int id;int chinese;int math;int english;stu[30];int count=0;void main(void)int c;char a;printf("\\n\\n\\t\\t\\t\\twelcome\\n");printf("\\n");printf("\\n");printf("\\n");printf("\\********************************************************************************\\n");printf("\\n");printf("\\n\\n\\t\\t\\t\\t1.input" );printf("\\n\\n\\t\\t\\t\\t2.");printf("\\n\\n\\t\\t\\t\\t3. ");printf("\\n\\n\\t\\t\\t\\t4.");printf("\\n\\n\\t\\t\\t\\t5.break");printf("\\n");printf("\\n");printf("\\n");printf("please choose the option\\n");scanf("%d",&c);switch(c)case 1:input();break;case 5:return 0;break;void input(void)//这要用voidchar c;doprintf("input information:\\n");printf("name:\\n");scanf("%s",&stu[count].name);printf("id:\\n");scanf("%d",&stu[count].id)

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中的值没有改变。你可以这样写:

typedef struct //绑定变量

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;
    ...

不知道你能看懂这段代码吗?其实最核心的问题是你要想在函数退出后改变函数参数的值,就必须使用地址传递

参考技术A 直接将结构体设置成变量如
typedef struct

...

snmp_seq;

snmp_seq sp;

然后再function1里直接对变量sp操作,如sp.xxx= xxx;
函数运行完,变量赋值保存;追问

这样也没有对赋值的结构进行保存啊?您能说得再详细点吗?

追答

这个结构体定义的是全局变量,会有保存,function1(WORK,len,fd); 可以不带sp参数

以上是关于c语言结构体问题的主要内容,如果未能解决你的问题,请参考以下文章

大一C语言问题,有关结构体。。。

C语言 结构体如何排序

C语言,结构体

C语言中结构体数组名作为函数参数的问题

C语言fwrite 结构体换行问题(初学C语言)

C语言结构体数组写入文件的问题