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 ...
随机推荐
- 014.统一建模语言UML
1.UML 的设计目的 UML是为了简化和强化现有的大量面向对象开发方法这一目的而开发的. UML 适用于各种软件开发方法.软件生命周期的各个阶段.各种应用领域以及各种开发工具,是一种总结了以往建模技 ...
- php导出百万数据到csv
<?php set_time_limit(0); // 设置超时 ini_set('memory_limit', '100M'); // 设置最大使用的内存 header("Conte ...
- 什么是证书透明度(Certificate Transparency)?
SSL基础概念 什么是加密? 加密是一种新型的电子信息保护方式,就像过去使用保险箱和密码锁保护纸上信息一样.加密是密码学的一种技术实现方式:信息被转换为难以理解的形式(即编码),以便只有使用密钥才能将 ...
- Python中print用法里面% ,"%s 和 % d" 代表的意思
Python 编程 里面% . "%s 和 % d" 代表的意思 %s,表示格化式一个对象为字符 %d,整数 "Hello, %s"%"zhang3& ...
- 201871010125 王玉江《面向对象程序设计(java)》第十三周学习总结
项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...
- day22_7.26面向对象之封装(接口与抽象)
一.封装. 封装就是将丑陋复杂的隐式的细节隐藏到内部,对外提供简单的使用接口. 对外隐藏内部实现细节,并提供访问的接口.对内使用self操作. 二.为什么要封装? 对于一个计算机来说,不可能不使用机箱 ...
- 09-tensorflow-tf.split()
# 'value' is a tensor with shape [5, 30] # Split 'value' into 3 tensors with sizes [4, 15, 11] along ...
- CBV和FBV用户认证装饰器
FBV装饰器用户验证 CBV装饰器用户验证 装饰器位置 或 或
- Gson:
- Excel-查找函数
1.VLOOKUP函数 该函数的语法规则如下: VLOOKUP(lookup_value,table_array,col_index_num,range_lookup) 多表关联查询---vlooku ...