精华内容
下载资源
问答
  • 结构体指针,可细分为指向结构体变量的指针和指向结构体数组的指针。指向结构体变量的指针前面我们通过“结构体变量名.成员名”的方式引用结构体变量中的成员,除了这种方法之外还可以使用指针。前面讲过,&...

    结构体指针,可细分为指向结构体变量的指针和指向结构体数组的指针。

    指向结构体变量的指针

    前面我们通过“结构体变量名.成员名”的方式引用结构体变量中的成员,除了这种方法之外还可以使用指针。

    前面讲过,&student1 表示结构体变量 student1 的首地址,即 student1 第一个项的地址。如果定义一个指针变量 p 指向这个地址的话,p 就可以指向结构体变量 student1 中的任意一个成员。

    那么,这个指针变量定义成什么类型呢?只能定义成结构体类型,且指向什么结构体类型的结构体变量,就要定义成什么样的结构体类型。比如指向 struct STUDENT 类型的结构体变量,那么指针变量就一定要定义成 struct STUDENT* 类型。

    下面将前面的程序用指针的方式修改一下:

    # include

    # include

    struct AGE

    {

    int year;

    int month;

    int day;

    };

    struct STUDENT

    {

    char name[]; //姓名

    int num; //学号

    struct AGE birthday; //生日

    float score; //分数

    };

    int main(void)

    {

    struct STUDENT student1; /*用struct STUDENT结构体类型定义结构体变量student1*/

    struct STUDENT *p = NULL; /*定义一个指向struct STUDENT结构体类型的指针变量p*/

    p = &student1; /*p指向结构体变量student1的首地址, 即第一个成员的地址*/

    strcpy((*p).name, "小明"); //(*p).name等价于student1.name

    (*p).birthday.year = ;

    (*p).birthday.month = ;

    (*p).birthday.day = ;

    (*p).num = ;

    (*p).score = ;

    printf("name : %s\n", (*p).name); //(*p).name不能写成p

    printf("birthday : %d-%d-%d\n", (*p).birthday.year, (*p).birthday.month, (*p).birthday.day);

    printf("num : %d\n", (*p).num);

    printf("score : %.1f\n", (*p).score);

    return ;

    }

    输出结果是:

    name : 小明

    birthday : 1989-3-29

    num : 1207041

    score : 100.0

    我们看到,用指针引用结构体变量成员的方式是:

    (*指针变量名).成员名

    注意,*p 两边的括号不可省略,因为成员运算符“.”的优先级高于指针运算符“*”,所以如果 *p 两边的括号省略的话,那么 *p.num 就等价于 *(p.num) 了。

    从该程序也可以看出:因为指针变量 p 指向的是结构体变量 student1 第一个成员的地址,即字符数组 name 的首地址,所以 p 和 (*p).name 是等价的。

    但是,“等价”仅仅是说它们表示的是同一个内存单元的地址,但它们的类型是不同的。指针变量 p 是 struct STUDENT* 型的,而 (*p).name 是 char* 型的。所以在 strcpy 中不能将 (*p).name 改成 p。用 %s 进行输入或输出时,输入参数或输出参数也只能写成 (*p).name 而不能写成 p。

    同样,虽然 &student1 和 student1.name 表示的是同一个内存单元的地址,但它们的类型是不同的。&student1 是 struct STUDENT* 型的,而 student1.name 是 char* 型的,所以在对 p 进行初始化时,“p=&student1;”不能写成“p=student1.name”。因为 p 是 struct STUDENT* 型的,所以不能将 char* 型的 student1.name 赋给 p。

    此外为了使用的方便和直观,用指针引用结构体变量成员的方式:

    (*指针变量名).成员名

    可以直接用:

    指针变量名->成员名

    来代替,它们是等价的。“->”是“指向结构体成员运算符”,它的优先级同结构体成员运算符“.”一样高。p->num 的含义是:指针变量 p 所指向的结构体变量中的 num 成员。p->num 最终代表的就是 num 这个成员中的内容。

    下面再将程序用“->”修改一下:

    # include

    # include

    struct AGE

    {

    int year;

    int month;

    int day;

    };

    struct STUDENT

    {

    char name[]; //姓名

    int num; //学号

    struct AGE birthday; /*用struct AGE结构体类型定义结构体变量birthday, 生日*/

    float score; //分数

    };

    int main(void)

    {

    struct STUDENT student1; /*用struct STUDENT结构体类型定义结构体变量student1*/

    struct STUDENT *p = NULL; /*定义struct STUDENT结构体类型的指针变量p*/

    p = &student1; /*p指向结构体变量student1的首地址, 即第一项的地址*/

    strcpy(p->name, "小明");

    p->birthday.year = ;

    p->birthday.month = ;

    p->birthday.day = ;

    p->num = ;

    p->score = ;

    printf("name : %s\n", p->name); //p->name不能写成p

    printf("birthday : %d-%d-%d\n", p->birthday.year, p->birthday.month, p->birthday.day);

    printf("num : %d\n", p->num);

    printf("score : %.1f\n", p->score);

    return ;

    }

    [转]C语言字节对齐问题详解

    C语言字节对齐问题详解 转载:https://www.cnblogs.com/clover-toeic/p/3853132.html 引言 考虑下面的结构体定义: typedef struct{ ch ...

    Linux C 语言之 Hello World 详解

    目录 Linux C 语言之 Hello World 详解 第一个 C 语言程序 程序运行原理 编译,链接 运行时 链接库 编译器优化 Hello World 打印原理 stdout, stdin 和 ...

    C语言解决约瑟夫问题详解的代码

    将开发过程中比较重要的一些内容做个收藏,下面的内容是关于C语言解决约瑟夫问题详解的内容,希望能对码农有帮助. #pragma once #include class PRO ...

    C语言字节对齐问题详解

    引言 考虑下面的结构体定义: typedef struct{ char c1; short s; char c2; int i; }T_FOO; 假设这个结构体的成员在内存中是紧凑排列的,且c1的起始 ...

    C语言预处理器命令详解【转】

    本文转载自:http://www.cnblogs.com/clover-toeic/p/3851102.html 一  前言 预处理(或称预编译)是指在进行编译的第一遍扫描(词法扫描和语法分析)之前所 ...

    C语言字节对齐问题详解(对齐、字节序、网络序等)

    首先说明一下,本文是转载自: http://www.cnblogs.com/clover-toeic/p/3853132.html 博客园用的少,不知道怎么发布转载文章,只能暂时这样了. 引言 考虑下 ...

    C语言字节对齐问题详解【转】

    引言 转自:http://www.cnblogs.com/clover-toeic/p/3853132.html 考虑下面的结构体定义: 1 typedef struct{ 2 char c1; 3 ...

    c语言文件操作函数详解

    一.文件操作注意点: 1 打开文件时,如果打开方式加“+”,表示该文件可以“写” ; 2 退出程序一般用exit函数,正常退出参数为0,非正常退出参数为正零值 ; 3 文件的读写操作:按字符.字符串. ...

    C语言链表各类操作详解

    链表概述 链表是一种常见的重要的数据结构.它是动态地进行存储分配的一种结构.它可以根据需要开辟内存单元.链表有一个“头指针”变量,以head表示,它存放一个地址.该地址指向一个元素.链表中每一个元素称 ...

    【C语言】printf函数详解

    C语言printf函数详解 一.相关基础知识 请求printf()打印变量的指令取决于变量的类型,例如打印整数用%d符号,打印字符用%c符号,这些符号称为转换说明(conversion specifi ...

    随机推荐

    QoS 测量 (目标,方法,协议)

    本文翻译自ITU-T的Technical Paper:

    spring+mybatis的优缺点

    mybatis的优缺点: 优点: 1. 易于上手和掌握. 2. sql写在xml里,便于统一管理和优化. 3. 解除sql与程序代码的耦合. 4. 提供映射标签,支持对象与数据库的orm字段关系映射 ...

    【转】android应用开发全程实录-你有多熟悉listview?---不错

    原文网址:http://www.cnblogs.com/noTice520/archive/2011/12/05/2276379.html 今天给大家带来 ...

    CCF系列之日期计算(201509-2)

    试题编号: 201509-2 时间限制: 1.0s 内存限制: 256.0MB 问题描述 给定一个年份y和一个整数d,问这一年的第d天是几月几日? 注意闰年的2月有29天.满足下面条件之一的是闰年: ...

    pipe size设置

    我所用的软件架构,使用pipe来实现线程之间的大量数据的传输.在实际操作中,pipe中传输的是数据的指针,而不是数据本身.  但是在调试过程中,我发现,如果我尝试往pipe里面write10000个指 ...

    [Leetcode]237. Delete Node in a Linked List -David_Lin

    Write a function to delete a node (except the tail) in a singly linked list, given only access to th ...

    [转] Form 表单数据处理 简单教程 formidable 使用心得

    入门,高手见笑 表单数据一种是get方式, 另一种是post 方式 1.get方式 对于get方式,node处理起来非常简单 如以下代码: var urlParsed = url.parse(requ ...

    Unity中的定时器与延时器

    JavaScript中的定时器与延时器,分别是 setInterval.setTimeout,对应的清理函数是:clearInterval.clearTimeout. 而在Unity中,则分别是:In ...

    随机数的组合问题(JavaScript描述)

    随机数的组合问题在面试时是经常考的,比如之前我就被问到:“有一个可以生成1-5的随机数函数,怎样把它扩大到1-7?” 在解决这个问题之前,先来看看另外一个比较简单的问题:“有一个可以生成1-7的函数, ...

    展开全文
  • 将C++代码转化为C的过程中,一些C++的特性无法使用类内私有变量在类内公共函数中使用,转化为C的时候选择用malloc的方式,申请一段内存空间去存储它,在函数中传指针形参去操作这些变量。这时候遇到一个问题,结构体...

    码农公社  210.net.cn  210是何含义?10月24日是程序员节,1024 =210、210既

    210

    之意。

    将C++代码转化为C的过程中,一些C++的特性无法使用

    类内私有变量在类内公共函数中使用,转化为C的时候选择用malloc的方式,申请一段内存空间去存储它,在函数中传指针形参去操作这些变量。

    这时候遇到一个问题,结构体中包含了另一个结构体的指针,这导致了我malloc的时候,另一个结构体中的内存空间没有申请到。

    总结了如下的简单示例:

    #include 

    #include 

    typedef struct _point{

    int m;

    int n;

    }point, *ppoint;

    typedef struct _PELoader{

    int m_hModule;

    ppoint m_pImportDesp;

    }PELoader, *PPELoader;

    void load(PELoader **Ldr);

    int main()

    {

    printf("%d

    ", sizeof(PELoader));//这里输出为8,说明分配给了m_hModule四个字节,并且分配了一个指针的大小:4个字节给这个结构体

    PPELoader Ldr = (PPELoader)malloc(sizeof(PELoader));

    Ldr->m_pImportDesp = (ppoint)malloc(sizeof(point));//在这里给m_pImportDesp指针指向的结构体(point)分配空间

    load(Ldr);

    printf("%d,%d,%d", Ldr->m_pImportDesp->m, Ldr->m_pImportDesp->n, Ldr->m_hModule);

    return 0;

    }

    void load(PELoader *Ldr)

    {

    Ldr->m_hModule = 2;

    Ldr->m_pImportDesp->m = 3;//如果没有给m_pImportDesp指向的结构体分配空间,运行到这里会发生内存中断的情况

    Ldr->m_pImportDesp->n = 5;

    }

    展开全文
  • 2016这篇文章主要介绍了详解C语言结构体中的函数指针,文中对函数指针的基本概念也有讲解,需要的朋友可以参考下结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。所以,标准C中的结构体是不允许包含成员...

    2016

    这篇文章主要介绍了详解C语言结构体中的函数指针,文中对函数指针的基本概念也有讲解,需要的朋友可以参考下

    结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。所以,标准C中的结构体是不允许包含成员函数的,当然C++中的结构体对此进行了扩展。那么,我们在C语言的结构体中,只能通过定义函数指针的方式,用函数指针指向相应函数,以此达到调用函数的目的。

    函数指针

    函数类型 (*指针变量名)(形参列表);第一个括号一定不能少。

    “函数类型”说明函数的返回类型,由于“()”的优先级高于“*”,所以指针变量名外的括号必不可少。

    注意指针函数与函数指针表示方法的不同,千万不要混淆。最简单的辨别方式就是看函数名前面的指针*号有没有被括号()包含,如果被包含就是函数指针,反之则是指针函数。

    要声明一个函数指针,使用下面的语法:

    1Return Type ( * function pointer's variable name ) ( parameters )

    例如声明一个名为func的函数指针,接收两个整型参数并且返回一个整型值

    1int (*func)(int a ,int b ) ;

    可以方便的使用类型定义运用于函数指针:

    1typedef int (*func)(int a ,int b ) ;

    结构体中的函数指针我们首先定义一个名为Operation的函数指针:

    1typedef int (*Operation)(int a ,int b );

    再定义一个简单的名为STR的结构体

    1

    2

    3

    4

    5typedef struct _str {

    int result ;// 用来存储结果

    Operation opt;// 函数指针

    } STR;

    现在来定义两个函数:Add和Multi:

    1

    2

    3

    4

    5

    6

    7

    8//a和b相加

    int Add (int a,int b){

    return a + b ;

    }

    //a和b相乘

    int Multi (int a,int b){

    return a * b ;

    }

    现在我们可以写main函数,并且将函数指针指向正确的函数:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10int main (int argc ,char **argv){

    STR str_obj;

    str_obj.opt = Add;//函数指针变量指向Add函数

    str_obj. result = str_obj.opt(5,3);

    printf (" the result is %d\n", str_obj.result );

    str_obj.opt= Multi;//函数指针变量指向Multi函数

    str_obj. result = str_obj.opt(5,3);

    printf (" the result is %d\n", str_obj.result );

    return 0 ;

    }

    运行结果如下:

    1

    2the result is 8

    the result is 15

    完整的代码如下:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28#include

    typedef int (*Operation)(int a,int b);

    typedef struct _str {

    int result ;// to sotre the resut

    Operation opt;// funtion pointer

    } STR;

    //a和b相加

    int Add (int a,int b){

    return a + b ;

    }

    //a和b相乘

    int Multi (int a,int b){

    return a * b ;

    }

    int main (int argc ,char **argv){

    STR str_obj;

    str_obj.opt = Add;//函数指针变量指向Add函数

    str_obj. result = str_obj.opt(5,3);

    printf ("the result is %d\n", str_obj.result );

    str_obj.opt= Multi;//函数指针变量指向Multi函数

    str_obj. result = str_obj.opt(5,3);

    printf ("the result is %d\n", str_obj.result );

    return 0 ;

    }

    展开全文
  • C语言结构体指针 删除函数 为什么删除后会显示0? 麻烦各位大神速度指点一下~~答案:2信息版本:手机版解决时间 2019-10-06 06:27已解决2019-10-05 23:56void Delete() //删除信息函数{FILE *fp;fp=fopen("student....

    C语言结构体指针 删除函数 为什么删除后会显示0? 麻烦各位大神速度指点一下~~

    答案:2  信息版本:手机版

    解决时间 2019-10-06 06:27

    已解决

    2019-10-05 23:56

    void Delete() //删除信息函数

    {

    FILE *fp;

    fp=fopen("student.txt","r");

    char choose;

    char name[20];

    p=s1;

    int i=0;

    fread(p,sizeof(Student),1,fp);

    printf("请输入删除学生姓名:");

    scanf("%s",&name);

    while(strcmp(name,p->Name)!=0&&p!=NULL) //判断该学生信息是否存在

    p++;i++;

    if(p!=NULL)

    {printf("学号 姓名 性别 语文 数学 英语 体育 C语言 总分 名次\n");

    printf("%-6d%6s%6s%6d%6d%6d%6d%6d%7d%6d\n",

    p->Num,p->Name,p->Sex,p->Chinese,p->Math,p->English,p->PE,p->Clanguage,p->total,p->rank);

    fp=fopen("student.txt","w");

    printf("\n是否删除(Y/N)");

    scanf("%s",&choose);

    if(choose=='y'||choose=='Y')

    {

    for(i=i;i{s1[i]=s1[i+1];}

    printf("删除成功!\n");

    fwrite(p,sizeof(struct Student),1,fp);

    }

    }

    else printf("没有此人信息。");

    printf("\n1.返回主菜单\n2.继续删除");

    scanf("%s",&choose);

    if(choose=='1')

    Menu();

    else if(choose=='2')

    Delete();

    最后结果就变成了第三行那样~~~

    ~~怎么减少一个单位啊!!我的N是define定义了的

    最佳答案

    2019-10-06 00:12

    void Delete() { //删除信息函数

    FILE *fp;

    fp = fopen("student.txt","r");//默认以文本方式打开

    char choose;

    char name[20];

    p = s1;

    int i = 0;

    fread(p,sizeof(Student),1,fp);// 块状读取文本文件是不合适的

    printf("请输入删除学生姓名:");

    scanf("%s",&name);

    while(strcmp(name,p->Name) && p) //判断该学生信息是否存在

    p++;i++; if(p != NULL) {

    printf("学号 姓名 性别 语文 数学 英语 体育 C语言 总分 名次\n"); printf("%-6d%6s%6s%6d%6d%6d%6d%6d%7d%6d\n",p->Num,p->Name,p->Sex, p->Chinese,p->Math,p->English,p->PE,p->Clanguage,p->total,p->rank);

    fp = fopen("student.txt","w");//默认以文本方式打开,fp已经用作文件student.txt,

    printf("\n是否删除(Y/N)");

    scanf("%s",&choose); // choose是char变量,应该用"%c"读取

    if(choose=='y'||choose=='Y') {

    for(i = i;i < N;i++) {

    s1[i] = s1[i + 1]; // 这里删除的是第一条记录,不一定是要删除的那一条

    } printf("删除成功!\n");

    fwrite(p,sizeof(struct Student),1,fp);// 块状写文本文件是不合适的

    }

    }

    else printf("没有此人信息。");

    printf("\n1.返回主菜单\n2.继续删除");

    scanf("%s",&choose); // 还是老问题

    if(choose=='1') Menu();

    else if(choose=='2') Delete(); // 递归调用会出问题的,这儿必须改 //

    .................

    }

    全部回答

    1楼

    2019-10-06 00:46

    #includetypedef struct stpeople

    {

    char name[20];

    char adr[20];

    char tel[20];

    };

    stpeople  stp[5];

    void input()

    {

    int i;

    printf("输入五人信息\n");

    for(i =0;i <5;i++)

    {

    printf("输入第%d个人的名字\n");

    scanf("%s",st[i].name);

    printf("输入第%d个人的地址\n");

    scanf("%s",st[i].adr);

    printf("输入第%d个人的电话\n");

    scanf("%s",st[i].tel);

    }

    }

    void print()

    {

    int i;

    for(i =0;i <5;i++)

    {

    printf("姓名 : %s 电话: %s 地址: %s\n",st[i].name,st[i].adr,st[i].tel);

    }

    }

    void main()

    {

    input();//输入

    print();//输出

    }

    我要举报

    如果感觉以上信息为低俗/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!

    大家都在看

    推荐资讯

    展开全文
  • C语言结构体封装函数指针 C语言结构体(Struct)从本质上讲是一种自定义的数据类型,只不过这种数据类型比较复杂,是由 int、char、float 等基本类型组成的。例如,在校学生有姓名、年龄、身高、成绩等属性,学了...
  • 今天终于看完了C语言深度剖析这本书,对C语言有了进一步的了解与感悟,突然发觉原来自己学C语言的时候学得是那样的迷糊,缺少深入的...定义了指针变量,没有为指针分配内存,即指针没有在内存中指向一块合法的内存...
  • 学习一下,保证自己的基础,边学边记录是个很好的习惯,以后回头来看看,就马上能了解了第一个程序是:C语言结构体指针用法,包括malloc和free的用法#include "stdafx.h"#include #include using namespace std;...
  • C语言 结构体相关 函数 指针 数组.作者 : 万境绝尘转载请注明出处 :http://www.hanshuliang.com/?post=30.结构体概述 : 结构体是 多个 变量的集合, 变量的类型可以不同;-- 可进行的操作 : 结构体可以进行 拷贝 赋值...
  • 1.首先定义一个结构体,给它取别名:typedef struct node{struct node * ...定义结构体指针与指针变量,给出几种不同的定义方式struct node *a,b;pnode *c,d;linklist p;他们别名的关系如下:linklist=struct nod...
  • 结构体指针作为函数参数,传递的是指向结构体变量的本身 结构体指针指向的变量成员值的改变影响对应的实参构体变量成员值的改变 代码 直接说有些抽象难懂,敲代码演示一遍就很清楚了 #include <stdio.h> #...
  • C语言结构体中的函数指针C语言结构体中的函数指针内容由小编收集整理,希望对您的 学习有所帮助!更多内容请关注应届毕业生考试网!结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。所以,标准C中的...
  • C语言开发中,结构体用到的机会很多。所谓结构体,就是定义一种里面包含多种元素的变量。我们来看一个简单的例子。比如你想定义一个书名列表然后为每本书创建书名和作者作为书的信息。结构体变量定义如下:struct ...
  • C语言结构体结构体指针的简单用法 这里总结一下自己的学习笔记,关于C语言当中的结构体指针的用法,以及结构体简单使用。 简单介绍一下今天出场的嘉宾–>结构体和结构体指针 什么是结构体: 1,定义多种类型的...
  • 一、结构体的定义struct student{ //struct 结构体名long studentID; //数据类型 成员名1char studentName[10]; //数据类型 成员名2int scoreMath; //数据类型 成员名3};二、结构体变量的定义1先声明结构体模板,再...
  • 谨记:malloc是在堆上面开辟空间,函数结束调用不会释放,malloc的空间一直存在 。 #include <stdio.h> #include <stdlib.h> struct Student { int score; char *name; }; struct Student* ...
  • #include <stdio.h> #include <stdlib.h> struct Student { char *name; int score; }; struct Student *xinXi(int n) ...struct Student *p = (struct Student )malloc(nsizeof(struct Student));...p-
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼在函数中对结构体赋值时赋不上,用printf查看结果始终为0,有人说是因为结构体指针使用前没有进行实例化导致。一知半解没明白什么叫实例化,好像是要用malloc分配内存。...
  • 首先:一定要谨记C语言中未初始化变量不能拿来使用,不能作为函数参数,是可以以传地址方式作为函数参数. 前言: 一般来讲,我们会把初始化结构体的代码提取出来,封装到init()函数中,而通过将结构体变量作为函数参数来...
  • 一、结构体作为函数参数、 二、结构体指针作为函数参数、 三、完整代码示例、
  • 下面是一个定义结构体指针的实例:struct stu{char *name; //姓名int num; //学号int age; //年龄char group; //所在小组float score; //成绩} stu1 = { "Tom", 12, 18, 'A', 136.5 };//结构体指针struct stu ...
  • c语言结构体函数调用参数怎么设置函数结构是下面的代码,main函数中如何调用showinfo函数,参数应该怎么设置,对参数的设置不太明白C/C++ code#include #define SIZE 5#define LEN 40struct birth{int year;...
  • 指针基础一 指针就是地址,地址就是指针.指针存储的是内存的地址.二 指针的定义1.&表示取址运算符,&a 可以取到 a 在内存中的地址;打印地址的占位符为(%p),printf(“%p\n”,&a);2. 指针变量的定义指针变量...
  • 还定义了成员方法,而类的结构和结构体非常的相似,所以,为什么不想想如何在C语言结构体中添加成员变量呢在C语言的结构体中是不能直接定义成员函数的,这点和C++不同,但是我们可以通过定义一个函数指针的方式来...
  • C语言结构体指针赋值

    千次阅读 2021-05-21 07:53:44
    C语言结构体指针赋值》由会员分享,可在线阅读,更多相关《C语言结构体指针赋值(6页珍藏版)》请在人人文库网上搜索。1、指向结构体的指针 在C语言中几乎可以创建指向任何类型的指针,包括用户自定义的类型。...
  • 最近写c程序遇到的结构体指针强转的坑,记录一下.是一个简单的菜单程序,程序用到链表,表中存储了9个不同命令.每次将用户输入的命令与表中存储的命令名作对比(遍历查询),然后执行相应功能.总体结构:linktable.h:定义...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 81,791
精华内容 32,716
关键字:

c语言结构体指针函数

c语言 订阅