美文网首页
C语言之构造类型

C语言之构造类型

作者: keeeeeenon | 来源:发表于2019-03-24 16:54 被阅读0次

一、结构体类型

1、构造结构体类型

struct 结构体类型名
{成员1的定义;
成员2的定义;
成员n的定义;
};

例如:

struct student
{int sn;
int age;
char sex;
int s[3];
};

注:
(1)定义成员的方式与定义普通变量的方式一样。
(2)成员列表必须用一对花括号括起。
(3)结构体名可以省略。

2、定义结构体变量

三种格式

A.先定义(构造)结构体类型名再定义结构体变量
例如:

main()
{
struct student//类型名
{int sn;
int age;
char sex;
int s[3];
};
/*类型定义*/
struct student stul,stu2,st[25];/*变量定义*/
}

B.在定义结构体类型的同时可以定义结构体变量
例如:

struct student
{int sn;
int agc;
char sex;
int s[3];
}stul,stu2,st[25];

C.类型、变量同时定义,类型名student省略。(一般不用)
例如:

struct
{int sn:
int age;
char scx;
int s[3];
int*p;
}stul,stu2,st[25];

注:(1)结构体变量在内存中占用字节数为各成员占用字节数总和。
例如:

sturct aa
{int num;
char name[10]:
};
struct bb
{int a ;
float b;
struct aa c;
};
struct bb a:计算:sizcof(a)的值是多少?
注意:char数组是每个元素占一个字节
结果:2+10+2+4=18

例:

double a;
double*b;
double c[5];
则:sizcof(a),sizcof(b),sizeof(c)的值分别为:
8  2   40

例:

若有定义语句char*pt[3];则sizcof(pt)的值为:
2*3=6
指针占字节数始终为2字节

3、结构变量的初始化及引用

使用结构体变量、结构体数组、结构体指针变量
(1)在定义结构体变量的同时可以将各成员的初值按顺序放在一对花括号中,来进行对结构体变量的初始化。若初值个数多于成员个数则出错,若初值个数少于成员个数,则多余成员自动赋0。

struct aa
{int a;
char b[10];
float c;
}al={30,"china",40.5},a2={60,"kunming"},a3;

(2)结构体变量不能整体引用,只能引用它的成员。(同数组相似)
引用结构体成员的方式:

结构体变量名.成员名
其中(.)为成员运算符。
如:
printf("al=%d,%s,%f",al);非法
printf("a1=%d,%s,%f",al.a,al.b,al.c);
al.a=80;
al.b="xinjiang";//非法:常量不能放在=左边
al.c=60.5;
  • 注意:“.”是成员运算符,与()[]共同为一级运算符

4、指向结构体数据类型的指针

(1)指向结构体变量的指针
可以用指针变量指向结构变量也可能用指针变量指向结构体变量中的成员。要注意指针变量的类型必须与它所指向变量的类型相同。当指针变量指向结构体变量时,对指针变量加1则跳过整个结构体而不是跳过一个成员。

如:
struct student
{int num;
char name[20];
char sex;
float score;
};
struct student aa={1001,"zhang",'M',80.5};
struct student*p&aa;
char*q=aa.name;
int*r=&aa.num;
看官见笑了
struct student aa{1001."zhang",M,80.5}.
struct student*p=&aa;
char*q=aa.name;
int*r=&aa.num;
当指针变量p指向结构体变量aa时,引用aa中成员的方式有三种:
aa.num
(*p).num 
p->num      ->指向运算符

aa.score
(*p).score 
p->score

(2)指向结构体数组的指针

struct student
{int num;
char name[20];
char sex;
float score;
};
struct student stu[3]={
{1001,"zhang",:M,60.5},
{1002,"peng",VM,100},
{1003,"wang";w,90.9}
};
struct student*p=stu;

见笑了

例题:

访问zhang:
stu[0].name
p->name
(*p).name
访问1002:
stu[1].num
(p+1)->num
(*(p+1)).num
访问w:
stu[2].sex
(p+2)->sex
(*(p+2)).sex

注:
(1)可以用结构体变量的成员作为实参,它与普通变量作为实参的用法是一样的。
(2)用结构体变量作为实参时,要求形参必须是同一结构体类型的变量,传递后形参与实参各对应成员值是一样的。
(3)也可以用结构体类型的地址(指针变量或数组)作为实参,要求形参必须是同一结构体类型的指针变量或数组。只要是地址传递,则可以通过形参来改变实参的值。

二、链表

在C语言之链表中有详细介绍,这里篇幅太长不做赘述

三、共用体类型

在C语言之共用体类型中有详细介绍,这里篇幅太长不做赘述

四、typedef

在C语言之typedef中有详细介绍,这里篇幅太长不做赘述

相关文章

  • C语言之构造类型

    一、结构体类型 1、构造结构体类型 例如: 注:(1)定义成员的方式与定义普通变量的方式一样。(2)成员列表必须用...

  • C语言基础6

    结构体概述 1 在C语言中,结构体(struct)指的是一种数据结构,是C语 言中构造类型的其中之一。 2 在实际...

  • C语言-构造类型

    构造类型:由基本数据类型组合构成的 1. 结构体 关键字 struct 可以由不同类型的数据组成 结构体类型不能重...

  • C语言-构造类型

    几篇文章复习C语言,摘录重点,仅用于个人学习~ 数组 所有的数组都是由连续的内存位置组成。最低的地址对应第一个元素...

  • C语言指针入门与基本数据类型

    C语言数据类型 基本数据类型 char short int long double float 构造类型 数组 结...

  • c/c++语言基础

    c/c++语言基础 基本类型(基本内置类型) 构造类型 指针类型 引用类型 空类型 数组 预处理命令 基本类型 基...

  • iOS开发系列文章[转]

    C语言 iOS开发系列--C语言之基础知识 iOS开发系列--C语言之数组和字符串 iOS开发系列--C语言之指针...

  • 女神悄悄告诉你:再不学C语言就晚了

    c语言入门 程序设计-算法-运算符-顺序 分支 循环结构。 C语言精通 数组-函数字串符 -指针-构造类型-预处理...

  • 第一个 C 语言编译器是怎样编写的?

    首先向C语言之父Dennis Ritchie致敬! 当今几乎所有的实用的编译器/解释器(以下统称编译器)都是用C语...

  • (二)C语言之动态内存分配

    (二)C语言之动态内存分配 一、静态内存分配 定义是指定分配的内存长度就是静态内存分配,是在栈内存中分配 二、C语...

网友评论

      本文标题:C语言之构造类型

      本文链接:https://www.haomeiwen.com/subject/yfpjvqtx.html