搜档网
当前位置:搜档网 › 对结构体成员进行赋值操作

对结构体成员进行赋值操作

对结构体成员进行赋值操作
对结构体成员进行赋值操作

#include

using namespace std;

struct student

{

int id;

char name[10];

char zhuanye[20];

};

void main()

{

student stu;

cout<<"请输入学生信息:"<

cout<<"学号:";

cin>>stu.id;

cout<<"姓名:";

cin>>https://www.sodocs.net/doc/c413372713.html, ;

cout<<"专业:";

cin>>stu.zhuanye;

cout<

cout<<"显示学生信息:"<

cout<<"学号:"<

cout<<"姓名;"<

cout<<"专业:"<

}

一、结构体类型变量的定义的两种方法:

1、先定义结构体类型,再定义结构体变量

例如,结构体如,定义了struct student 结构体类型,则可以使用该类型来定义一个结构体变量stu.

Struct student stu;Struct可以省略。

2、声明结构体类型的同时定义结构体变量

例如:

struct student

{

int id;

char name[10];

char zhuanye[20];

}stu;

二、结构体指针变量与结构体变量成员的访问

1、结构体指针变量的定义与初始化

定义格式如下:

结构体数据类型*变量[=&结构体变量]

struct student

{

int id;

char name[10];

char zhuanye[20];

}stu;

stu a;*p=&a;

p为结构体指,指向结构体变量针变量a。&a为结构体变量的指针。

3、结构体指针变量对结构体变量成员的引用

格式如下:

结构体指针变量->所指向的结构体变量的成员

或者:

(*结构体指针变量). 所指向的结构体变量的成员

例如:

Struct

{

char ch[2];

int x

}a,*p=&a;

p->ch[0]; p->ch[1]; p->x;

或者

(*p).ch[0]; (*p).ch[1]; (*p).x;

结构体的使用方法

下面介绍了结构体的创建和使用方法: 创建过程: 定义一个名字为addr_t的结构体,其内容为名位addr的数组,数组大小为NET_ADDR_SIZE。 typedef struct { addr_t *addr;//地址 u8 *msg;//信息 u8 len;//信息长度 u8 port;//端口 } ioctlRawSend_t;//发送信息结构体 定义一个名字为ioctlRawSend_t的结构体,其内容为一个结构体,一个无符号类型指针和两个无符号数。将内容中的结构体代入这个结构体类型中,其内容可以写成(这样写只是为了看得更清晰) typedef struct { u8 addr[NET_ADDR_SIZE];//地址 u8 *msg;//信息 u8 len;//信息长度 u8 port;//端口 } ioctlRawSend_t;//发送信息结构体 这是一个联合体(共用体),很好理解,就是把两个结构体成员(ioctlRawSend_t,ioctlRawReceive_t)放在了一起用同一个名字(ioctl_info)表示,成员占用相同的内存单元,其中内容同步变化。 从变量观察窗口我们可以看到变量是如何组织在一起的。

到现在就从最基础的数组组成了一个联合体,下面我们使用它。 下面的语句中显示了如何向刚才建立的联合体中写要求的数据。 下面进行逐句分析 第一行中写广播地址(具体数字可以认为变动,一般为{0xFF,0xFF,0xFF,0xFF})到联合体中的 发送地址中。下面是变量窗口中发生的变化(红色表示变化)。

接下来的一句为向信息中填充内容,下面是变量观察窗口的变化。其中msg只显示0号元素,是因为它是一个指针,指向的是首地址,其实其他的内容也已经变化。

结构体指针

C++语言结构体和指针 指针也可以指向一个结构体,定义的形式一般为: struct结构体名*变量名; 下面是一个定义结构体指针的实例: 上述代码已经测试。 注意:定义已经命名的结构体指针的时候必须用已命名结构体类型定义的结构体变量的地址进行初始化。 也可以在定义结构体的同时定义结构体指针: 上述代码已经测试 注意,结构体变量名和数组名不同,数组名在表达式中会被转换为数组指针,而结构体变量名不会,无论在任何表达式中它表示的都是整个集合本身,要想取得结构体变量的地址,必 pstu赋值只能写作: struct stu *pstu = &stu1; 而不能写作: struct stu *pstu = stu1; 还应该注意,结构体和结构体变量是两个不同的概念:结构体是一种数据类型,是一种创建变量的模板,编译器不会为它分配内存空间,就像int、float、char 这些关键字本身不占用内存一样;结构体变量才包含实实在在的数据,才需要内存来存储。下面的写法是错误的,不可能去取一个结构体名的地址,也不能将它赋值给其他变量: struct stu *pstu = &stu; struct stu *pstu = stu;

获取结构体成员 通过结构体指针可以获取结构体成员,一般形式为: (*pointer).memberName 或者: pointer->memberName 对了。 ,有了它,可以通过结构体指针 直接取得结构体成员;这C语言中的唯一用途。 上面的两种写法是等效的,我们通常采用后面的写法,这样更加直观。

运行结果: Name Num Age Group Score Zhou ping 5 18 C 145.0 Zhang ping 4 19 A 130.5 Liu fang 1 18 A 148.5 Cheng ling 2 17 F 139.0 Wang ming 3 17 B 144.5 结构体指针作为函数参数 结构体变量名代表的是整个集合本身,作为函数参数时传递的整个集合,也就是所有成员,而不是像数组一样被编译器转换成一个指针。如果结构体成员较多,尤其是成员为数组时,传送的时间和空间开销会很大,影响程序的运行效率。所以最好的办法就是使用结构体指针,这时由实参传向形参的只是一个地址,非常快速。 要铭记的一点就是:数组名称始终代表数组的指针指向第一个元素,数组名称加一始终指向下一个数组元素。

C语言结构体习题及答案

C语言结构体习题及答 案 集团企业公司编码:(LL3698-KKI1269-TM2483-LUI12689-ITT289-

第9章结构体 1.定义以下结构体类型 struct s { int a; char b; float f; }; 则语句printf("%d",sizeof(struct s))的输出结果为【】。 A) 3 B) 7 C) 6 D) 4 2.当定义一个结构体变量时,系统为它分配的内存空间是【】A)结构中一个成员所需的内存容量 B)结构中第一个成员所需的内存容量 C)结构体中占内存容量最大者所需的容量 D)结构中各成员所需内存容量之和 3.定义以下结构体类型 struct s { int x; float f; }a[3]; 语句printf("%d",sizeof(a))的输出结果为【】 A) 4 B) 12 C) 18 D) 6

7.定义以下结构体类型 struct student { char name[10]; int score[50]; float average; }stud1; 则stud1占用内存的字节数是【】。 A) 64 B) 114 C) 228 D) 7 9、设有一结构体类型变量定义如下: struct date { int year; int month; int day; }; struct worklist { char name[20]; char sex; struct date birthday; } person; 若对结构体变量person的出生年份进行赋值时,下面正确的赋值语句是。。。。

结构体的指针应用

什么是结构体? 简单的来说,结构体就是一个可以包含不同数据类型的一个结构,它是一种可以自己定义的数据类型,它的特点和数组主要有两点不同,首先结构体可以在一个结构中声明不同的数据类型,第二相同结构的结构体变量是可以相互赋值的,而数组是做不到的,因为数组是单一数据类型的数据集合,它本身不是数据类型(而结构体是),数组名称是常量指针,所以不可以作为左值进行运算,所以数组之间就不能通过数组名称相互复制了,即使数据类型和数组大小完全相同。 定义结构体使用struct修饰符,例如: struct test { float a; int b; }; 上面的代码就定义了一个名为test的结构体,它的数据类型就是test,它包含两个成员a和b,成员a的数据类型为浮点型,成员b的数据类型为整型。由于结构体本身就是自定义的数据类型,定义结构体变量的方法和定义普通变量的方法一样。 test pn1; 这样就定义了一个test结构体数据类型的结构体变量pn1,结构体成员的访问通过点操作符进行,pn1.a=10 就对结构体变量pn1的成员a进行了赋值操作。注意:结构体生命的时候本身不占用任何内存空间,只有当你用你定义的结构体类型定义结构体变量的时候计算机才会分配内存。 结构体,同样是可以定义指针的,那么结构体指针就叫做结构指针。 结构指针通过->符号来访问成员,下面我们就以上所说的看一个完整的例子: #include #include using namespace std; struct test//定义一个名为test的结构体 { int a;//定义结构体成员a int b;//定义结构体成员b }; void main() { test pn1;//定义结构体变量pn1 test pn2;//定义结构体变量pn2 pn2.a=10;//通过成员操作符.给结构体变量pn2中的成员a赋值 pn2.b=3;//通过成员操作符.给结构体变量pn2中的成员b赋值

c语言结构体用法(转载)

C语言,结构体(struct) 用法 结构(struct) 结构是由基本数据类型构成的、并用一个标识符来命名的各种变量的组合。 结构中可以使用不同的数据类型。 1. 结构说明和结构变量定义 在T urbo C中, 结构也是一种数据类型, 可以使用结构变量, 因此, 象其它 类型的变量一样, 在使用结构变量时要先对其定义。 定义结构变量的一般格式为: struct 结构名 { 类型变量名; 类型变量名; ... } 结构变量; 结构名是结构的标识符不是变量名。 类型为第二节中所讲述的五种数据类型(整型、浮点型、字符型、指针型和 无值型)。 构成结构的每一个类型变量称为结构成员, 它象数组的元素一样, 但数组中 元素是以下标来访问的, 而结构是按变量名字来访问成员的。

下面举一个例子来说明怎样定义结构变量。 struct string { char name[8]; int age; char sex[2]; char depart[20]; float wage1, wage2, wage3, wage4, wage5; } person; 这个例子定义了一个结构名为string的结构变量person, 如果省略变量名 person, 则变成对结构的说明。用已说明的结构名也可定义结构变量。这样定义 时上例变成: struct string { char name[8]; int age; char sex[2]; char depart[20]; float wage1, wage2, wage3, wage4, wage5; }; struct string person; 如果需要定义多个具有相同形式的结构变量时用这种方法比较方便, 它先作 结构说明, 再用结构名来定义变量。 例如: struct string T ianyr, Liuqi, ...; 如果省略结构名, 则称之为无名结构, 这种情况常常出现在函数内部, 用这 种结构时前面的例子变成:

指针和结构体练习题

第十章指针 一?选择题 1.变量的指针,其含义是指该变量的 _______________ A )值 B )地址 C )名 D )一个标志 2.已有定义int k=2;int *ptr1,*ptr2; 且ptr1和ptr2 均已指向变量 k ,下面不能正确执行 的赋值语句是 。 A ) k=*ptr1+*ptr2 B ) ptr2=k C ) ptr1=ptr2 D ) k=*ptr1*(*ptr2) 3.若有说明:int *p,m=5,n; 以下程序段正确的是 。 A ) p=&n ; B ) p = &n ; scanf( %d ",&p); scanf( %d ",*p); C ) scanf( %d",&n); D ) p = &n ; *p=n ; *p = m ; 4.已有变量定义和函数调用语句: int a=25;print_value(&a); 下面函数的输出结果 void prin t_value(i nt *x) { printf( %d\n ”++*x); } A) 23 B )24 C ) 25 D )26 5. 若有说明:int *p1, *p2,m=5,n; _____________ 以下均是正确赋值语句的选项是 B) p 仁&m; p2=&n; *p1 =* p2 ; C) p 仁&m; p2=p1 ; D ) p 仁&m; *p 仁*p2 ; 6. 若有语句:int *p,a=4; 和p=&a ;下面均代表地址的一组选项是 _ A) a,p,*&a B )&*a,&a,*p C )*&p,*p,&a D ) &a,&*p,p 7. 下面判断正确的是 ______________ 。 A) char *a= "ch in a ” 等价于 char *a; *a= "ch in a "; B) char str[1O]={ “hina ”;等价于 char str[1O]; str[ ]={ “hina";} C) char *s= "ch in a "; 等价于 char *s; s= "ch in a "; D) char c[4]= "abc ",d[4]= "abc ";等价于 char c[4]=d[4]= "abc "; 8. _______________________________________________ 下面程序段中,for 循环的执行次数是 ______________________________________________________ 。 char *s= "\ta\018bc "; for ( ; *s!= '\0'; s++) printf( *” A) 9 B ) 7 9. 下面能正确进行字符串赋值操作的是 A) char s[5]={ ABCDE ”; C ) char *s ; s= "ABCDE "; 10. 下面程序段的运行结果是 ________ char *s= "abcde"; s+=2 ; printf( %d",s); A) cde B )字符'' C )字符’c'的地址 D )不确定 11. 设pl 和p2是指向同一个字符串的指针变量, c 为字符变量,则以下不能正确执行的赋 值语句是 ________________ 。 A) c=*p1+*p2 B ) p2=c C ) p 仁p2 D ) c=*p1*(*p2) A ) p 仁&m; p2=&p1 ; C ) 6 D ) 5 B ) char s[5]={ A \'\'C','D','E '; D ) char *s; scanf( %s",s);

指针和结构体练习题.

第十章指针 一.选择题 1.变量的指针,其含义是指该变量的。 A)值 B)地址 C)名 D)一个标志 2.已有定义int k=2;int *ptr1,*ptr2;且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值语句是。 A)k=*ptr1+*ptr2 B)ptr2=k C)ptr1=ptr2 D)k=*ptr1*(*ptr2 3.若有说明:int *p,m=5,n;以下程序段正确的是。 A)p=&n ; B)p = &n ; scanf(“%d”,&p; scanf(“%d”,*p; C)scanf(“%d”,&n; D)p = &n ; *p=n ; *p = m ; 4.已有变量定义和函数调用语句:int a=25;print_value(&a;下面函数的输出结果是。 void print_value(int *x { printf(“%d\n”,++*x; } A)23 B)24 C)25 D)26 5.若有说明:int *p1, *p2,m=5,n;以下均是正确赋值语句的选项是。 A)p1=&m; p2=&p1 ; B)p1=&m; p2=&n; *p1=*p2 ; C)p1=&m; p2=p1 ; D)p1=&m; *p1=*p2 ; 6.若有语句:int *p,a=4;和p=&a;下面均代表地址的一组选项是。 A)a,p,*&a B)&*a,&a,*p C)*&p,*p,&a D)&a,&*p,p 7.下面判断正确的是。 A)char *a=”china”; 等价于char *a; *a=”china” ; B)char str[10]={“china”}; 等价于char str[10]; str[ ]={“china”;}

C语言中不同的结构体类型的指针间的强制转换详解

C语言中不同类型的结构体的指针间可以强制转换,很自由,也很危险。只要理解了其内部机制,你会发现C是非常灵活的。 一. 结构体声明如何内存的分布, 结构体指针声明结构体的首地址, 结构体成员声明该成员在结构体中的偏移地址。 变量的值是以二进制形式存储在内存中的,每个内存字节对应一个内存地址,而内存存储的值本身是没有整型,指针,字符等的区别的,区别的存在是因为我们对它们有不同的解读,param的值就是一个32位值,并且存储在某个内存单元中,通过这个32位值就能找到param所指向的结构的起始地址,通过这个起始地址和各个结构所包含变量离起始地址的偏移对这些变量进行引用, param->bIsDisable只是这种引用更易读的写法,只要param是指向 PAINT_PARAM的指针,那么param的值就肯定存在,param存在,偏移量已知,那么param->bIsDisable就肯定存在,只是要记住,param->bIsDisable只是代表了对param一定偏移地址的值。 不是说某个地址有那个结构体你才能引用,即使没有,你也能引用,因为你已经告诉了编译器param变量就是指向一个PAINT_PARAM结构体的变量并且指明了param的值,机器码的眼中是没有数据结构一说的,它只是机械的按照 指令的要求从内存地址取值,那刚才的例子来说,peg->x,peg->y的引用无论 0x30000000是否存在一个eg结构体都是合法的,如果0x30000000开始的8 个字节存在eg结构体,那么引用的就是这个结构体的值,如果这个位置是未定义的值,那么引用的结果就是这8个字节中的未定义值,内存位置总是存在的,而对内存中值的引用就是从这些内存位置对应的内存单元取值。 举个例子: typedefstruct_eg { int x; int y; }eg;

(完整版)matlab中使用结构体汇总

matlab中使用结构体 结构(struct)数组 要在MALTAB中实现比较复杂的编程,就不能不用struct类型。而且在MATLAB中实现struct比C中更为方便。 4. 3.1 结构数组的创建 MATLAB提供了两种定义结构的方式:直接应用和使用struct函数。 1. 使用直接引用方式定义结构 与建立数值型数组一样,建立新struct对象不需要事先申明,可以直接引用,而且可以动态扩充。比如建立一个复数变量x: x.real = 0; % 创建字段名为real,并为该字段赋值为0 x.imag = 0 % 为x创建一个新的字段imag,并为该字段赋值为0 x = real: 0 imag: 0 然后可以将旗动态扩充为数组: x(2).real = 0; % 将x扩充为1×2的结构数组 x(2).imag = 0; 在任何需要的时候,也可以为数组动态扩充字段,如增加字段scale:x(1).scale = 0;

这样,所有x都增加了一个scale字段,而x(1)之外的其他变量的scale字段为空: x(1) % 查看结构数组的第一个元素的各个字段的内容 ans = real: 0 imag: 0 scale: 0 x(2) % 查看结构数组的第二个元素的各个字段的内容,注意没有赋值的字段为空 ans = real: 0 imag: 0 scale: [] 应该注意的是,x的real、imag、scale字段不一定是单个数据元素,它们可以是任意数据类型,可以是向量、数组、矩阵甚至是其他结构变量或元胞数组,而且不同字段之间其数据类型不需要相同。例如: clear x; x.real = [1 2 3 4 5]; x.imag = ones(10,10); 数组中不同元素的同一字段的数据类型也不要求一样: x(2).real = '123'; x(2).imag = rand(5,1);

指针与结构体 上机

指针 1.在主函数中输入一个字符串str,调用函数统计字符串中出现的字母(含大 小写)、数字、空格及其他字符出现的次数,在主函数中输出统计结果。要求写三个版本的程序:(1)用指针作参数返回统计结果。(2)用引用做参数返回统计结果(引用做参数效率更高,代码更简单。)(3)用数组做参数返回统计结果(当返回多个同类型结果时用数组做参数更简单)。 1.#include using namespace std; void stat(char *str,int *letters,int *digits,int *others){ char c; for(char *str;*str!='\0';str++) {c=*str; if((c>'a'&&c<'z')||(c>'A'&&c<'Z')) (*letters)++; else if('0'<=c&&c<='9') (*digits)++; else (*others)++; } } void main(){ char str[100]; cin.getline(str,100); int letters=0; int digits=0; int others=0; stat(str,&letters,&digits,&others); cout<<"letters="< #include using namespace std; void stat(char *str,int *a){ char c; for(int i=0;str[i]!='\0';i++) {c=str[i];

c语言结构体心得体会

c语言结构体心得体会 c语言学习心得体会一c语言作为一种计算机的语言,我们学习它,有助于我们更好的了解计算机,与计算机进行交流,因此,c语言的学习对我们尤其重要。 在这个星期里,我们专业的学生在专业老师的带领下进行了c语言程序实践学习。在这之前,我们已经对c语言这门课程学习了一个学期,对其有了一定的了解,但是也仅仅是停留在了解的范围,对里面的好多东西还是很陌生的在运用起来的时候还是感到很棘手,毕竟,万事开头难嘛。 由于时间的关系,我们的这次实践课程老师并没有给我们详细的介绍,只是给我们简单的介绍了几个比较重要的实际操作。包括了程序模块处理。简单界面程序。高级界面程序。程序的添加修改。用程序做一元线性回归处理以及用c 语言程序来画粒度分布图等这几样比较重要的时间操作。 上机实验是学习程序设计语言必不可少的实践环节,特别是c语言灵活、简洁,更需要通过编程的实践来真正掌握它。对于程序设计语言的学习目的,可以概括为学习语法规定、掌握程序设计方法、提高程序开发能力,这些都必须通过充分的实际上机操作才能完成。 c语言学习心得体会二C语言是在国内外广泛使用的一种计算机语言。其语言功能丰富、表达能力强、使用灵活方便、既具有高级语言的优点,又具有低级语言的许多特

点,适合编写系统软件。其功能强大,不仅用在计算机上广泛用在电子,机械等方面上,而且,所有的windows,Unix,Linux,Mac,os/2,无一例外,哪一个不是C 语言写的?很多新型的语言如,C++,Java,C#,J#,perl... 都是衍生自C语言。掌握了C语言,可以说你就掌握了很多门语言。 学习C程序这门课一年了,这是我们学的第一门专业课,在大学里C语言不但是计算机专业的必修课程而且也是非计算机专业学习计算机基础的一门必修课程。所以作为我这个计算机专业的学生来说当然十分重要,老师在第一节课说过,C语言是计算机的基础,大多数软件都需要用C语言来编写,通过一个年的学习,使我由初步掌握简单的应试知识到完成高难度的深入编程,如我们在编写一个较大的程序时应该把它分开成几个小程序来看,这样会容易得多。同时,我觉得 C语言应该是操作和理论相结合的课程,在不断地编写中去思考,两者是不可分割的。 在学习一年C语言的过程中我也在慢慢探索怎样才能学好C语言,并总结了一点经验: 要了解C语言就要从语法基础来学习起,首先要是要了解它的结构,比如变量,首先要了解变量的定义方式(格式),其意义是什么(定义变量有什么用); 其次就是要我要怎么去运用它(我要用什么型式去应用

结构指针

题目内容: 定义一个学生的结构体,包含姓名,年龄,身高从键盘输入一组学生信息 结果打印4组数据 输入样例 Tom 20 1.70 输出 Tom0 20 1.70 Tom1 21 1.71 Tom2 22 1.72 Tom3 23 1.73 输入描述 从键盘输入一组学生信息 结果打印3组数据 输入样例 Tom 20 1.70 输出描述 结果打印4组数据 输出 Tom0 20 1.70 Tom1 21 1.71 Tom2 22 1.72 Tom3 23 1.73 输入样例 Tom 20 1.70 输出样例 Tom0 20 1.70 Tom1 21 1.71 Tom2 22 1.72 Tom3 23 1.73 程序代码

for(i=0;i<4;i++) printf("%s%d %d %.2f\n",https://www.sodocs.net/doc/c413372713.html,,i,a.age+i,a.high+i *0.01); return 0; } 2.c-05-1 回文句子 (10分) C时间限制:3000 毫秒 | C内存限制:3000 Kb 题目内容: "回文句"是一种句型,一个句子如果正着读与倒着读的意思一样,就可以称为"回文句"。 如:蜜蜂酿蜂蜜;风扇能扇风;奶牛产牛奶;清水池里池水清;静泉山上山泉;上海自来水来自海上;雾锁山头山锁雾;天连水尾水连天;门盈喜气喜盈门。 在英文中也是有回文的,而且是一种非常有趣的修辞,即palindrome,其结构跟中文是 一个道理。英文回文举例: Able was I ere I saw Elba。(在我看到厄尔巴岛之前,我曾所向无敌) Madam, I' m Adam.(女士, 我是Adam) Was it a bar or a bat I saw? (我看到的是酒吧还是蝙蝠?) 编写一个函数,判断给定英文句子是不是回文句。 输入描述 输出描述 输入样例 输入样例1: Madam, I' m Adam. 输入样例2:

C语言结构体(struct)常见使用方法

C语言结构体(struct)常见使用方法 基本定义:结构体,通俗讲就像是打包封装,把一些有共同特征(比如同属于某一类事物的属性,往往是某种业务相关属性的聚合)的变量封装在内部,通过一定方法访问修改内部变量。 结构体定义: 第一种:只有结构体定义 [cpp]view plain copy 1.struct stuff{ 2.char job[20]; 3.int age; 4.float height; 5.}; 第二种:附加该结构体类型的“结构体变量”的初始化的结构体定义 [cpp]view plain copy 1.//直接带变量名Huqinwei 2.struct stuff{ 3.char job[20]; 4.int age; 5.float height; 6.}Huqinwei; 也许初期看不习惯容易困惑,其实这就相当于: [cpp]view plain copy 1.struct stuff{ 2.char job[20]; 3.int age;

4.float height; 5.}; 6.struct stuff Huqinwei; 第三种:如果该结构体你只用一个变量Huqinwei,而不再需要用 [cpp]view plain copy 1.struct stuff yourname; 去定义第二个变量。 那么,附加变量初始化的结构体定义还可进一步简化出第三种: [cpp]view plain copy 1.struct{ 2.char job[20]; 3.int age; 4.float height; 5.}Huqinwei; 把结构体名称去掉,这样更简洁,不过也不能定义其他同结构体变量了——至少我现在没掌握这种方法。 结构体变量及其内部成员变量的定义及访问: 绕口吧?要分清结构体变量和结构体内部成员变量的概念。 就像刚才的第二种提到的,结构体变量的声明可以用: [cpp]view plain copy 1.struct stuff yourname; 其成员变量的定义可以随声明进行: [cpp]view plain copy 1.struct stuff Huqinwei = {"manager",30,185}; 也可以考虑结构体之间的赋值: [cpp]view plain copy

C语言中结构体的使用

脚踏实地,心无旁骛,珍惜分分秒秒。紧跟老师,夯实基础。 什么是结构体? 简单的来说 结构体就是一个可以包含不同数据类型的一个结构 它是一种可以自己定义的数据类型 它的特点和数组主要有两点不同 首先结构体可以在一个结构中声明不同的数据类型 第二相同结构的结构体变量是可以相互赋值的 而数组是做不到的 因为数组是单一数据类型的数据集合 它本身不是数据类型(而结构体是) 数组名称是常量指针 所以不可以做为左值进行运算 所以数组之间就不能通过数组名称相互复制了 即使数据类型和数组大小完全相同 定义结构体使用struct修饰符 例如: struct test { float a; int b; }; 上面的代码就定义了一个名为test的结构体 它的数据类型就是test 它包含两个成员a和b 成员a的数据类型为浮点型 成员b的数据类型为整型 由于结构体本身就是自定义的数据类型 定义结构体变量的方法和定义普通变量的方法一样 test pn1; 这样就定义了一test结构体数据类型的结构体变量pn1 结构体成员的访问通过点操作符进行 pn1.a=10 就对结构体变量pn1的成员a进行了赋值操作 注意:结构体生命的时候本身不占用任何内存空间 只有当你用你定义的结构体类型定义结构体变量的时候计算机才会分配内存

结构体 同样是可以定义指针的 那么结构体指针就叫做结构指针 结构指针通过->符号来访问成员 下面我们就以上所说的看一个完整的例子: #include #include using namespace std; struct test//定义一个名为test的结构体 { int a;//定义结构体成员a int b;//定义结构体成员b }; void main() { test pn1;//定义结构体变量pn1 test pn2;//定义结构体变量pn2 pn2.a=10;//通过成员操作符.给结构体变量pn2中的成员a赋值 pn2.b=3;//通过成员操作符.给结构体变量pn2中的成员b赋值 pn1=pn2;//把pn2中所有的成员值复制给具有相同结构的结构体变量pn1 cout<a=99;//通过结构指针修改结构体变量pn2成员a的值 cout<a<<"|"<b<

c语言结构体定义结构体

c语言结构体定义结构体 代码1 定义结构体_m_usmart_devstruct _m_usmart_dev{struct _m_usmart_nametab *funs;//函数名指针 void (*init)(u8);//初始化u8 (*cmd_rec)(u8*str);//识别函数名及参数void (*exe) (void); //执行void (*scan)(void); //扫描u8 fnum; //函数数量u8 pnum; //参数数 量u8 id;//函数idu8 sptype;//参数显示类型(非字符串参数):0,10 进制;1,16 进制; u16 parmtype;//参数的类型u8 plentbl[MAX_PARM]; //每个参数的长度暂存表u8 parm[PARM_LEN]; //函数的参数}; 代码2 定义_m_usmart_dev 类型的结构体并对其赋初始值 struct _m_usmart_dev usmart_dev={usmart_nametab,usmart_init,usmart_cmd_rec,usmart_exe,usmart_scan, sizeof(usmart_nametab)/sizeof(struct _m_usmart_nametab),//函数数量0, //参数数 量0, //函数ID1,//参数显示类型,0,10 进制;1,16 进制0,//参数类型.bitx:,0,数字;1, 字符串0, //每个参数的长度暂存表,需要MAX_PARM 个0 初始化0,//函数的参 数,需要PARM_LEN 个0 初始化}; 上边代码可理解为 struct _m_usmart_dev{struct _m_usmart_nametab *funs;//函数名指针 void (*init)(u8);//初始化u8 (*cmd_rec)(u8*str);//识别函数名及参数void (*exe) (void); //执行void (*scan)(void); //扫描u8 fnum; //函数数量u8 pnum; //参数数 量u8 id;//函数idu8 sptype;//参数显示类型(非字符串参数):0,10 进制;1,16 进制; u16 parmtype;//参数的类型u8 plentbl[MAX_PARM]; //每个参数的长度暂存表u8 parm[PARM_LEN]; //函数的参数} usmart_dev={usmart_nametab,usmart_init,usmart_cmd_rec,usmart_exe,usmart_scan,

c语言中struct的用法

c语言中struct的用法 c语言中struct的用法的用法如下:基本定义:结构体,通俗讲就像是打包封装,把一些有共同特征(比如同属于某一类事物的属性,往往是某种业务相关属性的聚合)的变量封装在内部,通过一定方法访问修改内部变量。 结构体定义:第一种:只有结构体定义[cpp] view plain copy 在CODE上查看代码片派生到我的代码片01.struct stuff{02. char job[20];03. int age;04. float height;05.};第二种:附加该结构体类型的“结构体变量的初始化的结构体定义[cpp] view plain copy 在CODE 上查看代码片派生到我的代码片01.//直接带变量名Huqinwei02.struct stuff{03. char job[20];04. int age;05. float height;06.}Huqinwei;也许初期看不习惯容易困惑,其实这就相当于:[cpp] view plain copy 在CODE上查看代码片派生到我的代码片01.struct stuff{02. char job[20];03. int age;04. float height;05.};06.struct stuff Huqinwei;第三种:如果该结构体你只用一个变量Huqinwei,而不再需要用[cpp] view plain copy 在CODE上查看代码片派生到我的代码片01.struct stuff yourname;去定义第二个变量。 结构体变量及其内部成员变量的定义及访问:绕口吧?要分清结构体变量和结构体内部成员变量的概念。 就像刚才的第二种提到的,结构体变量的声明可以用:[cpp] view plain copy 在CODE上查看代码片派生到我的代码片01.struct stuff

C语言结构体部分

C语言结构体部分--知识点及试题 结构体是一种重要的数据结构,在实践中有广泛的应用。计算机二级考试大纲对结构体部分的要求为:(1)结构体类型数据的定义方法和引用方法。(2)用指针和结构体构成链表,单向链表的建立、输出、删除与插入。下面就这些基本知识点和有关试题进行总结和解析,希望对考试有所帮助。 一、基础知识 (1)结构体的定义 struct 结构体名例如: struct student { { 成员列表 char name[20]; }变量表; int age; char sex; }stu1,stu2 ; 注意:结构体定义完后,别忘了分号! 也可这样定义:struct student stu1, stu2 ; 结构体数组的定义: struct student x[10]; (2)结构体成员的访问 两种方式:直接访问。如:stu1. age 用指针访问。先定义指向结构体的指针:struct student *p; 然后可以通过:(*p) . 成员变量或 p->成员变量来访问。 (3)关于单项链表 先了解两个函数: 内存分配函数 malloc 如:int *p; p=(int *) malloc (sizeof (int));分配一块整型大小的内存空间。 注意:malloc无返回值,分配内存时要强制类型转换。 内存释放函数 free free ( 要释放内存的地址) ; 有关链表具体的操作请参看谭浩强的《C程序设计(第二版)》11. 7节(p273) 重点了解基本思想和相关算法,其实考试时的程序根本没有书上的难。在这里我要说,重点理解有关链表插入及删除时指针移动的先后顺序问题。注意指针的保存和归位。(既头指针的保存和链表遍历时指针的归位)。这都是考试重点,相信我没错的。 二、典型试题及解析 (1)以下程序运行的结果是_______ #include”stdio.h” main() { struct date { int year , month , day ; } today ;

C语言复习题指针结构体

C语言复习题_指针&结构体 一、选择 1、若有以下定义:char s[20]="programming",*ps=s; 则不能代表字符'o'的表达式是A。 A) ps+2 B) s[2] C) ps[2] D) ps+=2,*ps 2、若有以下定义和语句: int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;则不能表示a数组元素的表达式是B。 A) *p B) a[10] C) *a D) a[p-a] 3、已知int *p,a; p=&a; 这里的运算符& 的含义D。 A) 位与运算B) 逻辑与运算C) 取指针内容D) 取变量地址 4、定义结构体如下: struct student { int num; char name[4]; int age; }; 则printf(“%d”,sizeof(struct student))的结果为: 12。 5、若有定义如下:int i=3,*p=&i; 显示i的值的正确语句是B。 A) printf(“%d”,p); B) printf(“%d”,*p); C) printf(“%p”,*p); D) printf(“%p”,p); 6、在定义结构体时,下列叙述正确的是A。 A) 系统不会分配空间 B) 系统会按成员大小分配空间 C) 系统会按最大成员大小分配空间 D) 以上说法均不正确 7、指针是一种D。 A) 标识符B) 变量C) 运算符D) 内存地址 8、定义struct s {int x; char y[6];} s1;,请问正确的赋值是C。 A) s1.y=”abc”; B) s1->y=”abc”; C) strcpy(s1.y,”abc”); D) s1.strcpy(y,”abc”); 9、已知定义“int x =1, *p”,则合法的赋值表达式是A。 A) p =&x B) p = x C) *p =&x D) *p =*x

C语言程序设计基础-结构体习题

1、把一个学生的信息(包括学号、姓名、性别、住址)放在一个结构体变量中,然后输出这个学生的信息。 #include <> int main() {struct Student { long int num; char name[20]; char sex; char addr[20]; }a={10101,“Li Lin”,‘M’, “123 Beijing Road”}; 》 printf("NO.:%ld\nname:%s\n sex:%c\naddress:%s\n",,,,; return 0; } 2、输入两个学生的学号、姓名和成绩,输出成绩较高学生的学号、姓名和成绩 #include <> int main() { struct Student { int num; ! char name[20]; float score; }student1,student2; scanf("%d%s%f",&,, &; scanf(“%d%s%f”,&,, &; printf("The higher score is:\n"); if > printf("%d %s %\n",,, ; else if < printf("%d %s %\n",,, ; ? else {printf("%d %s %\n",,, ; printf("%d %s %\n",,, ; } return 0; } 3、有3个候选人,每个选民只能投票选一人,要求编一个统计选票的程序,先后输入被选人的名字,最后输出各人得票结果。 #include <>

#include <> 》 struct Person { char name[20]; int count; }leader[3]={“Li”,0,“Zhang”,0,“Sun”,0}; int main() { int i,j; char leader_name[20]; for (i=1;i<=10;i++) { scanf(“%s”,leader_name); for(j=0;j<3;j++) if(strcmp(leader_name, 。 leader[j].name)==0) leader[j].count++; } for(i=0;i<3;i++) printf("%5s:%d\n“,leader[i].name, leader[i].count); return 0; } \ 4、有n个学生的信息(包括学号、姓名、成绩),要求按照成绩的高低顺序输出各学生的信息。 #include <> struct Student { int num; char name[20]; float score; }; int main() { struct Student stu[5]={{10101,"Zhang",78},{10103,"Wang",},{10106,"Li", 86 },{10108,“Ling”, },{10110,“Fun”, 100 } }; struct Student temp; const int n = 5 ; int i,j,k; printf("The order is:\n"); ( for(i=0;istu[k].score) k=j; temp=stu[k]; stu[k]=stu[i]; stu[i]=temp;

相关主题