Bliner'Site Bliner'Site

高树靡阴,独木不林。


  • 首页

  • 分类 10

  • 标签 36

  • 归档 214

  • 关于我

  • 搜索

标签:C

C语言中建立数据类型-共用体类型数据特点-学习笔记-54

发表于 2018-10-21 | 分类 笔记&教程 | 评论数: 0 | 阅读次数: 168

引入

上节,我们学习了共用体,即所有成员的起始内存地址相同。共用体和结构体的定义方法差不多,我们说结构体和共用体最大的区别就是共用体的占用内存长度是成员中占用内存最长的,而结构体则是成员占用内存长度之和。

共用体特点

共用体和结构体有很多却别,那么这些区别造就了结构体和共用体各自什么样的特点呢?

存放成员

共用体是使用同一段内存存放不同类型的成员,但每一瞬间只能存放一个成员,不能同时存放几个。因为在每一个瞬间,存储单元只能有唯一的内容。

union Data{
int i;
char ch;
float f;
}a;
a.i=97;
//我们给 a 这个共用体变量的整型 i 赋值97
printf("%d\n",a.i);  //输出97
printf("%c\n",a.ch);  //输出「a」
printf("%f\n",a.f);  // 输出0.000000
阅读全文 »

C语言中建立数据类型-共用体类型和共用体变量-学习笔记-53

发表于 2018-10-20 | 分类 笔记&教程 | 评论数: 0 | 阅读次数: 62

引入

如果想在一段内存单元,存放不同类型的变量,如

整型
字符型
实型变量

存放在同一个地址开始的内存单元。 该怎么办?

这时,就需要共用体类型,整型、字符型、实型变量所占用的字节数是不同的,如果要在同一个内存地址开始,势必意味着后一个数据要覆盖前一个数据。

我们称这种使几个不同的变量共享同一段内存的结构,为共用体类型的结构。

共用体也可以顾名思义,共用一段内存开始地址的共用体

共用体类型

一般形式

union 共用体名
{
成员表列
} 变量表列; (注意有分号)

如:

union Data{
int i;
char ch;
float f;
}a,b,c;
阅读全文 »

C语言中建立数据类型-输出动态链表-学习笔记-52

发表于 2018-10-19 | 分类 笔记&教程 | 评论数: 0 | 阅读次数: 50

引入

一句话,输出动态链表,就是输出链表中的各个节点。

例子引入

上一节,我们已经大概知道了,如何使用头指针输出第一个结点,那么该如何输出其它结点呢?我们来写一个输出链表的函数 print。

#include <stdio.h>
#include <stdlib.h>
#define LEN sizeof(struct Student)
struct Student{
long num;
float score;
struct Student *next;
};

int n;

struct *Student create(void){
struct Student *p1,*p2,*head;
p1=p2=(struct Student*)malloc(LEN);
scanf("%ld %f",&p1->num,&p1->score);
while(p1->num!=0){
n=n+1;
if(n==1){
head=p1;
}else{
p2->next=p1;
}
p2=p1;
p1=(struct Student*)malloc(LEN);
scanf("%ld %f",&p1->num,&p1->score);
}
p2->next=NULL;
return (head);
}

void print(struct Student *stu){
//传递过来的是 head 头指针
do{
printf("\n学号:%ld\n成绩:%3.1f\n\n",stu->num,stu->score);
stu=stu->next;  //如果 stu 指向的是 NULL,方便停止。
}while (stu->next!=NULL);
}

int main(){
struct Student *pt;
pt=create();
print(pt);
return 0;
}
阅读全文 »

C语言中建立数据类型-建立动态链表-学习笔记-51

发表于 2018-10-19 | 分类 笔记&教程 | 评论数: 0 | 阅读次数: 39

引入

上一节,我们讲了如何建立一个静态链表,今天我们就来说说如何建立一个动态链表。还记得他们的区别吗?

静态链表
所有结点都是手动创建的,不是程序创建的。
不能随时创建和随时释放。

动态链表

在程序执行过程中,从无到有地建立起一个链表,即一个一个地开辟结点和输入各个结点数据,并建立起先后相连的关系的链表为动态链表。

例子引入

建立有3名学生的单向动态链表

#include <stdio.h>
#include <stdlib.h>
#define LEN sizeof(struct Student)

struct Student{
long num;
float score;
struct Student *next;
};

int n;

struct Student *create(void){
struct Student *p1,*p2, *head;
p1=p2=(struct Student *)malloc(LEN);
scanf("%ld %f",&p1->num,&p1->score);
while(p1->num!=0){
n=n+1; 
if(n==1){
head=p1;
}else{
p2->next=p1;
}
p2=p1; 
p1=(struct Student *)malloc(LEN); 
scanf("%ld %f",&p1->num,&p1->score);
}
p2->next =NULL; 
return (head); 
}

int main(){
struct Student *pt;
pt=create(); 
printf("\n学号是:%ld\n成绩是:%3.1f\n",pt->num , pt->score);
return 0;
}
阅读全文 »

C语言中建立数据类型-链表以及建立简单静态链表-学习笔记-50

发表于 2018-10-18 | 分类 笔记&教程 | 评论数: 0 | 阅读次数: 41

引入

如果学习过数据结构,就会知道,链表是一种常见的重要的数据结构。它是动态的进行存储分配的一种结构。
在前面的学习中,我们知道,用数组存放数据时,必须线定义数组长度,也就是数组中元素的个数。
那么如果我们用来存储班级人数,有的班级100人,有的班级30人,那么为了能放下100人的数据,我们必须设计一个100个元素的数组。显然,这会浪费很多内存。
链表,就没有这种缺点,它根据需要开辟存储单元。

链表

我们先来看一个链表

  • head :表示链表中的头指针变量。它存放一个地址,该地址指向一个元素。链表中的每一个元素,称为结点;
  • 节点 :表示链表中的每一个元素,每个结点都应该包含两个部分:
    1.是用户所需要用的实际数据
    2.是下一个结点的地址。

上面的图中,head 是头指针,指向第1个元素
第1个元素指向第2个元素,以此类推
直到最后一个元素,该元素不再指向其它元素,它称为表尾
表尾的地址部分存放的地址为:NULL
链表到此结束

阅读全文 »

C语言中建立数据类型-结构体变量和结构体变量的指针作为函数参数-学习笔记-49

发表于 2018-10-18 | 分类 笔记&教程 | 评论数: 0 | 阅读次数: 65

引入

前面,我们知道了什么是结构体变量和结构体变量的指针,那么它们能不能在形参中出现,接收主调函数传递过来的值呢?我们现在就一起来看看~

将结构体变量的值传递给另一个函数

其实,结构体变量和结构体变量的指针,甚至结构体变量的成员都可以作为函数参数来使用。

结构体变量的成员作为实参

例如使用 stu[1].name stu[3].num 等结构体变量的成员作为函数参数,进行虚实结合,跟普通变量一样,属于值传递的方式。

注意: 实参和形参的类型要保持一致。

用结构体变量作为实参

用结构体变量做实参,也是采用值传递的方式,结构体变量所占的内存单元的内容全部按顺序传递给形参。所以,形参必须也是相同的结构体类型。

阅读全文 »

C语言中建立数据类型-结构体指针-学习笔记-48

发表于 2018-10-17 | 分类 笔记&教程 | 评论数: 0 | 阅读次数: 92

引入

我们知道,指针就是地址,那么结构体指针呢?其实就是指向结构体变量的起始地址,就是这个结构体变量的指针。相反的,如果吧结构体的起始地址存放在一个指针的,那么这个指针就指向该结构体变量。

定义

指向结构体对象的指针:
即可以指向结构体数组中的元素;
也可以指向结构体变量。

struct Student *student_1;
// student_1 指向 struct Student 类型的变量或者数组元素

例子

通过指向结构体变量的指针变量,来输出结构体内各成员的信息

#include <stdio.h>
int main(){
    struct Student{
        int num;
        char name[20];
        int score;
    };
    struct Student stu_1={1,"Bliner",99};
    struct Student *stu_p;
    stu_p=&stu_1;
    printf("学号是:%d\n姓名是:%s\n成绩是:%d\n\n",stu_1.num,stu_1.name,stu_1.score);
    printf("指针方式输出\n学号是:%d\n姓名是:%s\n成绩是:%d\n",(*stu_p).num,(*stu_p).name,(*stu_p).score);
}
阅读全文 »

C语言中建立数据类型-定义结构体数组-学习笔记-47

发表于 2018-10-17 | 分类 笔记&教程 | 评论数: 0 | 阅读次数: 87

引入

前面,我们学习了如何声明一个结构体类型和初始化结构体变量,那么数组能不能设置为结构体类型呢?答案是肯定的,这就是结构体数组。结构体数组和普通数组的最大区别就是,每个数组元素其实都是一个结构体类型的数据,因为数组是结构体类型。

例子

三个候选人,10张选票,我们设计一个统计选票的程序,输入10个选票的结果,输出统计数量。

#include <stdio.h>
#include <string.h>
int main(){
    struct People{
        char name[20];
        int count;
    }leader[3]={"a",0,"b",0,"c",0};
    char leader_name[20];
    for (int i=0;i<10;i++){
        scanf("%s",leader_name);
        for (int j=0;j<3;j++){
            if(strcmp(leader_name,leader[j].name)==0){
                leader[j].count++;
            }
        }
    }
    printf("最终结果是:\n");
    for(int i=0;i<3;i++){
        printf("%s 获得 %d 票 !\n",leader[i].name,leader[i].count);
    }
    return 0;
}
阅读全文 »

C语言中建立数据类型-结构体变量的初始化和引用-学习笔记-46

发表于 2018-10-16 | 分类 笔记&教程 | 评论数: 0 | 阅读次数: 118

引入

前面,我们已经学习了三种声明结构体变量的方式,今天我们来学习如何给结构体变量赋初始值和输出该结构体成员的值。

例子

把一个学生信息放在一个结构体变量中,然后输出这个学生的信息。

#include <stdio.h>
int main(){
    struct Student{
        int num;
        char name[20];
        char sex;
        int age;
        char addr[50];
    }student_1={001,"Bliner",'M',26,"China,Beijing"};
    printf("No.%d\n姓名:%s\n性别:%c\n年龄%d\n家庭住址:%s\n",student_1.num,student_1.name,student_1.sex,student_1.age,student_1.addr);
    return 0;
}

输出结果:

No.1
姓名:Bliner
性别:M
年龄26
家庭住址:China,Beijing

阅读全文 »

C语言中建立数据类型-定义结构体类型变量-学习笔记-45

发表于 2018-10-15 | 分类 笔记&教程 | 评论数: 0 | 阅读次数: 45

引入

前面,我们讲了如何建立一个结构体类型,但是并没有定义变量,系统也不分配具体的内存单元。我们可以采用以下3种方法定义结构体类型变量。

先声明结构体类型,再定义该类型变量

没有这个类型,就声明这个类型,然后再定义这个类型的变量。这种声明方式最常用和简单,声明和定义分离,声明后可以随时定义变量,比较灵活。

#include <stdio.h>
int main(){
struct Student{
int num;
char name[20];
char sex;
int age;
};

struct Student student_1,student_2;
//定义 student 结构体类型的变量
int student_1,student_2;
//和普通定义整型变量很像,struct Student 就等同于 int 
}
阅读全文 »
上一页 1 ... 8 9 10 ... 14 下一页
Bliner

Bliner

214 日志 10 分类 36 标签
RSS

推荐阅读

关于GTD中项目“复盘”的一想法
© 2008 - 2026 Bliner
鲁ICP备13021673号