C语言语法教程-结构体
2018-09-30
结构体中成员变量地址是连续的,结构体用于描述记录。
Create a struct
//----------------------------
//struct1.c
//创建一个结构体,给结构体成员赋值,并输出一个成员值。
//----------------------------
#include <stdio.h>
struct teacher
{
/*
no、name、sex是成员
*/
int no;
char *name;//将存储字符串的变量声明为指针的形式,下面会谈到。
char *sex;
};//使用中括号括起成员列表,后面加上分号
/*
上面是结构体声明,也可以放在main函数里面。
struct是结构体关键字,teacher是结构体名,struct teacher是结构体类型。
*/
int main(int argc, char const *argv[])
{
struct teacher tech1;//定义一个结构体变量tech1,再次说明,teacher是结构体名。另外,丢掉struct也是可以的。
tech1.no=1001;//成员赋值
/*
在声明结构体的时候,将存储字符串的变量声明为指针的形式,就可以在main函数中使用下面这种形式进行字符串变量赋值了。
*/
tech1.name="wangfang";
tech1.sex="女";
//也可以这样:struct teacher tech1 = {1001,"wangfang","女"};不可以分开哟。
struct teacher *p;//定义一个指向结构体的指针变量p
/*
一个指向变量的指针表示的是占内存中起始位置,一个指向结构体的变量的指针表示的是这个结构体变量占内存中的起始位置,同样它也可以指向结构体变量数组。
为啥指针变量非要是struct teacher类型。因为通过指针变量存储的地址可以访问此地址以及后续地址所存储的内容,但是如何解析这个内容呢?
所以要给指针声明类型,那么声明什么样的类型呢?显然,你要解析出什么样的类型就声明什么样的类型,你是要按访问的类型解析,所以指针类型和其所指向的变量类型一致。
*/
p=&tech1;//使用取地址符将结构体变量的地址给指针p
printf(p->sex);
/*
使用p->sex这样的形式访问成员,这里的箭头与指针搭配。也可以用tech1.sex,或者把tech1换成指针也可以,像这样(*p).sex。
*/
return 0;
}
Create a struct pointer
//-------------------------------------
//--- struct2.c
//--- 介绍结构体指针,通过指针访问结构体成员值。
//-------------------------------------
#include <stdio.h>
struct teacher
{
int no;
char name[10];
char sex[10];
};
int main(int argc, char const *argv[])
{
struct teacher tech1;
struct teacher *p;
p=&tech1;
scanf("%d",&(p->no));//p->no通过指针取出了成员变量no;&(p->no)取出了该成员变量的地址
printf("%d",tech1.no);
scanf("%s",p->sex);
/*
p->sex通过指针取出了字符数组成员变量sex;而p->sex就是字符数组的首地址。如果成员变量sex是指针,像struct1.c那样,那么scanf("%s",p->sex)是行不通的。
*/
printf("%s",tech1.sex);//也可以用printf(tech1.sex)
return 0;
}
Create a struct array
//-------------------------------------
//--- struct3.c
//--- 介绍结构体数组
//-------------------------------------
#include <stdio.h>
struct teacher
{
int no;
char name[10];
char sex[10];
}tech[3]={
{1001,"wang fang", "女"},
{1002,"zhou yu", "女"},
{1003,"zhang han", "女"}};
int main(int argc, char const *argv[])
{
struct teacher *p;
p=tech;//指针指向结构体数组
printf("%s",p->sex);
return 0;
}
/*
p+1表示数组中第2个元素tech[1]的起始地址
*/
Create an union
//-------------------------------------
//--- struct4.c
//--- 介绍共用体(联合体)
//-------------------------------------
#include <stdio.h>
typedef struct
{
int no;
char name[10];
char sex[10];
int job;
union//这是联合体关键字,联合体成员共用一块内存单元,共有首地址,内存单元长度由占用空间最大的成员决定。同一时刻只有一个成员有效。
{
int class;//学生有班级无职称
char prof[20];//教师有职称无班级
//教师和学生只能选择一种属性,故适合用联合体。至于引用,就像这样staf[2].category.class。
}category;
}STAFFER;
//使用typedef对结构体重新定义后,结构体类型为STAFFER
int main(int argc, char const *argv[])
{
STAFFER staf[20];
//code//
return 0;
}
C语言语法教程-结构体的更多相关文章
- golang | Go语言入门教程——结构体初始化与继承
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是golang专题第10篇文章,我们继续来看golang当中的面向对象部分. 在上一篇文章当中我们一起学习了怎么创建一个结构体,以及怎么 ...
- Go语言基础之结构体
Go语言基础之结构体 Go语言中没有“类”的概念,也不支持“类”的继承等面向对象的概念.Go语言中通过结构体的内嵌再配合接口比面向对象具有更高的扩展性和灵活性. 类型别名和自定义类型 自定义类型 在G ...
- C语言第九讲,结构体
C语言第九讲,结构体 一丶结构体的定义 在C语言中,可以使用结构体(Struct)来存放一组不同类型的数据.结构体的定义形式为: struct 结构体名{ 结构体所包含的变量或数组 }; 结构体是一种 ...
- 标记化结构初始化语法 在结构体成员前加上小数点 如 “.open .write .close ”C99编译器 .
今天在看串口驱动(四)的时候 有这样一个结构体初始化 我很不理解 如下: static struct s3c24xx_uart_port s3c24xx_serial_ports[NR_PORTS] ...
- GO学习-(13) Go语言基础之结构体
Go语言基础之结构体 Go语言中没有"类"的概念,也不支持"类"的继承等面向对象的概念.Go语言中通过结构体的内嵌再配合接口比面向对象具有更高的扩展性和灵活性. ...
- C语言中的结构体,结构体数组
C语言中的结构体是一个小难点,下面我们详细来讲一下:至于什么是结构体,结构体为什么会产生,我就不说了,原因很简单,但是要注意到是结构体也是连续存储的,但要注意的是结构体里面类型各异,所以必然会产生内存 ...
- 4-17疑难点 c语言之【结构体对齐】
今天学习了结构体这一章节,了解到了结构体在分配内存的时候采取的是对齐的方式 例如: #include<stdio.h> struct test1 { int a; char b; shor ...
- C 语言实例 - 使用结构体(struct)
C 语言实例 - 使用结构体(struct) C 语言实例 C 语言实例 使用结构体(struct)存储学生信息. 实例 #include <stdio.h> struct student ...
- Verilog缺少一个复合数据类型,如C语言中的结构体
https://mp.weixin.qq.com/s/_9UsgUQv-MfLe8nS938cfQ Verilog中的数据类型(Data Type)是分散的,缺少一个复合数据类型:把多个wire, r ...
随机推荐
- 剑指offer 8:旋转数组的最小数字
题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素.例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转 ...
- Django 中使用 js 操作 cookies
session与cookie对比 Cookie: 保存在用户浏览器端的键值对 本地可以修改:如果有敏感信息,可以被看到 Session: 保存在服务器端的键值对 服务端:保存键值对{'随机字符串':{ ...
- tornado中的options常用姿势
tornado是facebook开源的非阻塞web容器,类似java的netty,tornado.options是负责解析tornado容器的全局参数的,同时也能够解析命令行传递的参数和从配置文件中解 ...
- DV型、OV型、EV型证书的主要区别
DV型和OV型证书的区别 DV和OV型证书最大的差别是:DV型证书不包含企业名称信息:而OV型证书包含企业名称信息,以下是两者差别对比表: DV OV 包含企业名称信息 否 是 验证公司名称 ...
- C语言之整除
除法运算符:/ 当除数和被除数都整形时,就是整除. 当浮点数和整数放到一起运算时,C语言会将整数转换成浮点数,然后进行浮点数的运算. #include<stdio.h> int main( ...
- webpack开发指南1
怎么安装Webpack 安装node.js 首先需要安装Node.js,node自带了包管理工具npm. 安装webpack 使用npm install webpack -g,webpack全局安装到 ...
- C++和C的相互调用
C++和C相互调用实际工程中C++和C代码相互调用是不可避免的C++编译器能够兼容C语言的编译方式C++编译器会优先使用C++编译的方式extern关键字能强制让C++编译器进行C方式的编译 exte ...
- 201777010217-金云馨《面向对象程序设计(java)》第十六周学习总结
项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...
- .net使用IIdentity和IPrincipal实现自定义身份及权限认证【转】
1,通过继承BasePage页实现角色权限控制 context.User中保存的信息就是相关的角色与权限信息.Context.User类型为System.Security.Principal.IPri ...
- [BZOJ1040][CODEVS1423][ZJOI2008]骑士
题目描述 Description Z国的骑士团是一个很有势力的组织,帮会中汇聚了来自各地的精英.他们劫富济贫,惩恶扬善,受到社会各界的赞扬.最近发生了一件可怕的事情,邪恶的Y国发动了一场针对Z国的侵略 ...