您现在的位置是:首页 > 学无止境 > C语言网站首页C语言 如何学习C语言、入门C语言,看这篇就够了

如何学习C语言、入门C语言,看这篇就够了

  • 莫愁
  • C语言
  • 2019-11-10
简介该文章将会把C语言基础语法梳理一遍,主要记录帮助理解相关知识点的代码示例和重要或容易忽略的面试知识,将会陆续发布系类文章.
字数 24775

结构体和联合体

1.程序 声明并初始化结构体

// 使用结构体显示电子账单
#include <stdio.h>
#include <string.h>
int main(int argc, const char * argv[]){
    // 创建一个结构体
    struct ebill{
        int mno;
        char name[20];
        int previous;
        int present;
        int units;
        float charge;
    };
    // 声明ebill类型变量eb
    struct ebill eb;

    // 将数据存储到结构体变量的数据成员中
    eb.mno = 1005;
    strcpy(eb.name, "Raj Kumar");
    eb.previous = 500;
    eb.present = 750;
    eb.units = eb.present - eb.previous;
    eb.charge = eb.units*4.50;

    // 从结构体实例中读取并显示数据
    printf("Meter no: %d\n",eb.mno);
    printf("Customer name: %s\n",eb.name);
    printf("Previous reading: %d\n",eb.previous);
    printf("Present reading: %d\n",eb.present);
    printf("Total units: %d\n",eb.units);
    printf("Total charge: %8.2f\n",eb.charge);
}

输出:

Meter no: 1005
Customer name: Raj Kumar
Previous reading: 500
Present reading: 750
Total units: 250
Total charge:  1125.00

2.程序 结构体指针

// 使用结构体指针访问和显示结构体实列的数据成员
#include <stdio.h>
#include <string.h>
int main(int argc, const char * argv[]){
    // 创建一个结构体
    struct ebill{
        int mno;
        char name[20];
        int previous;
        int present;
        int units;
        float charge;
    };
    // 声明一个结构体指针
    struct ebill *ptr = NULL;

    // 使用->操作符向结构体传值
    ptr->mno = 1005;
    strcpy(ptr->name, "Raj Kumar");
    ptr->previous = 500;
    ptr->present = 750;
    ptr->units = ptr->present - ptr->previous;
    ptr->charge = ptr->units*4.50;

    // 使用->从结构体实例中读取并显示数据
    printf("Meter no: %d\n",ptr->mno);
    printf("Customer name: %s\n",ptr->name);
    printf("Previous reading: %d\n",ptr->previous);
    printf("Present reading: %d\n",ptr->present);
    printf("Total units: %d\n",ptr->units);
    printf("Total charge: %8.2f\n",ptr->charge);
}

输出:

Meter no: 1005
Customer name: Raj Kumar
Previous reading: 500
Present reading: 750
Total units: 250
Total charge:  1125.00

3.程序向函数传递结构体参数

// 使用结构体变量向函数传递参数
#include <stdio.h>
#include <string.h>
// 全局声明一个结构体
struct student{
    int rno;
    char name[20];
};

// 用于显示结构体的函数
void display(struct student st);
int main(int argc, const char * argv[]){
    // 声明结构体变量
    struct student s;

    // 存储数据至结构体成员变量
    s.rno = 10;
    strcpy(s.name, "Priya");
    // 调用函数,传递结构体变量
    display(s);
}

// 用于显示结构体成员的函数
void display(struct student st){
    printf("rno = %d\n",st.rno);
    printf("Name = %s\n",st.name);
}

输出:

rno = 10
Name = Priya

4.程序 结构体指针传参

// 使用结构体变量向函数传递参数
#include <stdio.h>
#include <string.h>
// 全局声明一个结构体
struct student{
    int rno;
    char name[20];
};

// 用于显示结构体的函数
void display(struct student *ptr);
int main(int argc, const char * argv[]){
    // 声明结构体变量
    struct student *s;

    // 存储数据至结构体成员变量
    s->rno = 10;
    strcpy(s->name, "Priya");
    // 调用函数,传递结构体变量
    display(s);
}

// 用于显示结构体成员的函数
void display(struct student *ptr){
    printf("rno = %d\n",ptr->rno);
    printf("Name = %s\n",ptr->name);
}

5.程序 拷贝结构体变量

// 将一个结构体变量的数据拷贝到另一个结构体中
#include <stdio.h>
int main(int argc, const char * argv[]){
    // 定义结构体
    struct employee{
        int id;
        char name[20];
    };
    // 初始化e1
    struct employee e1 = {10,"Venu"};
    // e2也是结构体变量
    struct employee e2;
    // 讲e1n的内容拷贝至e2
    e2 = e1;

    // 显示
    printf("Id = %d\n",e2.id);
    printf("Name = %s\n",e2.name);
}

输出:

// 将一个结构体变量的数据拷贝到另一个结构体中
#include <stdio.h>
int main(int argc, const char * argv[]){
    // 定义结构体
    struct employee{
        int id;
        char name[20];
    };
    // 初始化e1
    struct employee e1 = {10,"Venu"};
    // e2也是结构体变量
    struct employee e2;
    // 讲e1n的内容拷贝至e2
    e2 = e1;

    // 显示
    printf("Id = %d\n",e2.id);
    printf("Name = %s\n",e2.name);

}

6.程序 嵌套结构体

// 嵌套结构体
#include <stdio.h>
// 存储生日信息
struct dob{
    int dd;
    int mm;
    int yy;
};

// 存储雇员数据
struct employee{
    int id;
    char name[20];
    struct dob d;   // d是一个dob结构体变量
};

int main(int argc, const char * argv[]){
    struct employee e;

    printf("Enter employee id: \n");
    scanf("%d",&e.id);
    fflush(stdin);

    printf("Enter employee name: \n");
    gets(e.name);
    printf("Enter date of birth (dd/mm/yyyy): \n");
    scanf("%d%d%d",&e.d.dd,&e.d.mm,&e.d.yy);

    printf("Id = %d\n",e.id);
    printf("Name = %s\n",e.name);
    printf("Date of birth: %d/%d/%d\n",e.d.dd,e.d.mm,e.d.yy);
}

输出:

Enter employee id: 
1001
Enter employee name: DaWei
Enter date of birth (dd/mm/yyyy): 
22/06/1988
Id = 1001
Name = DaWei
Date of birth: 22/06/1988

6.程序 查找系统日期和时间

// 联合体的行为
#include <stdio.h>
int main(int argc, const char * argv[]){
    // 定义一个联合体
    union mixed{
        char ch;
        int in;
    };
    // 声明联合体变量u
    union mixed u;
    // 将字符A保存至u的数据成员ch中
    u.ch = 'A';
    // 显示该联合体实例的两个数据成员
    printf("ch value = %c\n",u.ch);
    printf("in value = %i\n",u.in);
}

输出:

ch value = A
in value = 65

7.重要的面试题

何时为结构体分配内存?
答:声明结构体类型时并不会为结构体分配内存,只有当声明结构体变量时才会为其分配内存.

8.重要的面试题

结构体和数组有什么区别?
答:数组只能存储同一类型的数据,结构体可以存储不同类型的数据;
如果将一个数组的元素拷贝至另外一个数组,则需要逐个元素拷贝,而讲一个结构体实列中的数据拷贝至另外一个结构体实列,只需要逐个拷贝或直接将结构体变量赋值给另外一个结构体变量.

9.重要的面试题

结构体变量是否可以当左值来处理?
答:可以,当表达式左边变量为结构体变量是,例如,

struct dob{
    int dd;
    int mm;
    int yy;
};

现在,我们写下这行代码:

date1 = data2;

变量date2中date,month,year数据都会被赋给date1相关数据元素.因此结构体既可以当成左值,也可以是右值.

10.重要的面试题

是否可以在结构体或联合体中定义一个函数?
答:不可以,在结构体或联合体中定义一个函数,但是可以在结构体或联合体的定义中声明一个函数指针数据成员,该函数指针可以调用一个在结构体或联合体外定义的函数.

 第10页/共11  首页 上一页 8 9 10 下一页 尾页


转载: 感谢您对莫愁个人博客网站平台的认可,非常欢迎各位朋友分享到个人站长或者朋友圈,但转载请说明文章出处“来源莫愁个人博客 https://www.mochoublog.com/study/367.html”。

文章评论

    • 评论
    人参与,条评论

技术在线

服务时间

周一至周日 12:00-22:00

关闭下雪
关闭背景特效