精华内容
下载资源
问答
  • http://blog.csdn.net/edwzhang/article/details/72277942012测试代码:#include #include int main() {struct student {char *name;int score;};struct student st = {"Brian", 97};struct student *ptr = &...

    http://blog.csdn.net/edwzhang/article/details/7227794

    2012

    测试代码:

    #include

    #include

    int main() {

    struct student {

    char *name;

    int score;

    };

    struct student st = {"Brian", 97};

    struct student *ptr = &st;

    printf("ptr->name = %s\n", ptr->name);

    printf("*ptr->name = %c\n", *ptr->name);

    printf("*ptr->name++ = %c\n", *ptr->name++);

    printf("*ptr->name = %c\n", *ptr->name);

    printf("ptr->score = %d\n", ptr->score);

    printf("ptr->score++ = %d\n", ptr->score++);

    printf("ptr->score = %d\n", ptr->score);

    return 0;

    }

    === 运行结果:

    ptr->name = Brian

    *ptr->name = B

    *ptr->name++ = B

    *ptr->name = r

    ptr->score = 97

    ptr->score++ = 97

    ptr->score = 98

    === 分析:

    1. ptr->name,这个不说了。

    2. *ptr->name,因为->的优先级高于*,所以相当于: *(ptr->name)。即指针首地址的那个字符。

    3. *ptr->name++,由于*和++的优先级相同,而且结合性是由右至左,所以相当于: *((ptr->name)++),即获取首地址字符后,将name指针右移一位。(当前打印还是首地址的值)

    4. *ptr->name,此处为验证上一步的指针位置。

    展开全文
  • 定义和使用结构体变量自己建立结构体类型用户自己建立由不同类型数据组成的组合型的数据结构,它称为结构体声明一个结构体类型的一般形式为:struct 结构体名{ 成员表列 };**************************struct Student...

    定义和使用结构体变量

    自己建立结构体类型

    用户自己建立由不同类型数据组成的组合型的数据结构,它称为结构体

    声明一个结构体类型的一般形式为:

    struct 结构体名

    { 成员表列 };

    **************************

    struct Student{

    int num;

    char name[20];

    char sex;

    int age;

    float score;

    char addr[30];

    }

    上面这个的结构体类型为 :struct Student

    它包括num,name,sex,age,score,addr等不同类型的成员

    注:结构体的成员可以是结构体

    struct Date{

    int month; int day; int year; };

    struct Stu {

    int num;char name[20];struct Date birthday;

    };

    定义结构体类型变量

    定义结构体类型变量有以下几种方法

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

    声明结构体类型struct Student

    struct Student student1,student2;

    student1

    10001 Zhang Xin 19 Shanghai

    在声明类型的同时定义变量

    struct Student

    { int num;

    char name[20];

    int age;

    char addr[30];

    } student1,student2;

    不指定类型名而直接定义结构体类型变量

    struct

    { 成员表列 }

    变量名表列;

    注:

    结构体类型与结构体变量是不同的概念,不要混同。只能对变量赋值、存取或运算,而不能对一个类型赋值、存取或运算。在编译时,对类型是不分配空间的,只对变量分配空间。

    结构体类型中的成员名可以与程序中的变量名相同(尽量不要重名),但二者不代表同一对象。

    对结构体变量中的成员(即“域”),可以单独使用,它的作用与地位相当于普通变量。

    结构体变量的初始化和引用

    定义结构体数组一般形式是

    ① struct 结构体名

    {成员表列}

    数组名[数组长度];

    ② 先声明一个结构体类型,然后再用此类型定义结构体数组:

    结构体类型 数组名[数组长度];

    如:

    struct Person leader[3];

    be4c4a78818f66f362995bdd95b49e98.png

    直接看例子,就是定义一个学生信息的结构体,然后对他初始化输出

    #include

    int main( ){

    struct Studen{

    long int num;

    char name[20];

    char sex;

    char addr[20];

    }

    a={10101,"Li Lin",'M',"Beijing"};

    printf("NO.:%ld\nname:%s\n sex:%c\naddress:%s\n",

    a.num,a.name,a.sex,a.addr);

    return 0;

    }

    NO.:10101

    name:Li Lin

    sex:M

    address:Beijing

    下面这些是对上面的补充

    a.num=10010; 对

    printf(“%s\n”,a); 不对

    struct Student b;

    b=a; 对

    b.num++; 对

    scanf(″%ld″,&a.num); 对

    printf(″%o″,&a); 对

    scanf(“%ld,%s,%c,%s\n”,&a); 错

    a.birthday.month=12; 对

    a.age=10; b.age=9; 对

    sum=a.age+b.age; 对

    使用结构体数组

    定义结构体数组

    还是从例题入手,理论多没意思啊

    c2c9c8fbc8efed27569228a72c8e73e0.png

    例:有3个候选人,每个选民只能投票选一人,要求编一个统计选票的程序,先后输入被选人的名字,最后输出各人得票结果。

    #include

    #include

    struct person // 声明结构体类型struct person

    {char name[20]; // 候选人姓名

    int count; // 候选人得票数

    }leader[3]={"Li",0,"Zhang",0,"Fun",0}; // 定义结构体数组并初始化

    int main()

    {int i,j;

    char leader_name[20]; // 定义字符数组

    for (i=1;i<=10;i++)

    {scanf("%s",leader_name); // 输入所选的候选人姓名

    for(j=0;j<3;j++)

    if(strcmp(leader_name,leader[j].name)==0) leader[j].count++;

    }

    printf("\nResoult:\n");

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

    printf("%5s:%d\n",leader[i].name,leader[i].count);

    return 0;

    }

    前面设了一个结构体,里面包含name和count,后面leader是数组名3是数组长度

    L、Z、S就是三个人的名字,有10个人投票,strcmp是判断两个字符是否i相等,是就为0,不是就为1。

    结构体指针

    指向结构体变量的指针

    指向结构体对象的指针变量既可以指向结构体变量,也可以用来指向结构体数组中的元素。

    指针变量的基类型必须与结构体变量的类型相同。例如:

    struct Student *pt;

    ffbf6fa8c90098d903fc263850d0b451.png

    通过指向结构体变量的指针变量输出结构体变量中成员的信息

    #include

    #include

    int main(){

    struct student

    {long num;

    char name[20];

    char sex;

    float score;

    };

    struct student stu_1; // 定义struct student类型的变量stu_1

    struct student * p; // 定义指向struct student 类型数据的指针变量p

    p=&stu_1; // p指向stu_1

    stu_1.num=10101; // 对结构体变量的成员赋值

    strcpy(stu_1.name,"Li Lin");

    stu_1.sex='M';

    stu_1.score=89.5;

    printf("No.:%ld\nname:%s\nsex:%c\nscore:%5.1f\n",

    stu_1.num,stu_1.name,stu_1.sex,stu_1.score); // 输出结果

    printf("\nNo.:%ld\nname:%s\nsex:%c\nscore:%5.1f\n",

    (*p).num,(*p).name,(*p).sex, (*p).score);

    return 0;

    }

    可以看到*p也是这个结构体的,p指向同一类型(student类型)的stu_1,下面两种输出方式结果是一样的。*p就是取p存的内容,就是stu_1

    指向结构体数组的指针

    有3个学生的信息,放在结构体数组中,要求输出全部学生的信息

    #include

    struct student

    {int num;

    char name[20];

    char sex;

    int age;

    };

    struct student stu[3]={{10101,"Li Lin",'M',18},

    {10102,"Zhang Fun",'M',19},

    {10104,"Wang Min",'F',20}}; // 定义结构体数组并初始化

    int main(){

    struct student *p; //定义指向struct student结构体的数组

    printf(" No. Name sex age\n");

    for (p=stu;p

    printf("%5d %-20s %2c %4d\n",p->num, p->name, p->sex, p->age);

    return 0;

    }

    为了使用方便和直观,C语言允许把(*p).num用p->num来代替

    (*p).name等价于p->name

    用指针处理链表

    什么是链表

    链表是一种常见的重要的数据结构

    它是动态地进行存储分配的一种结构

    8d2da90fdf7c20c15a66cde6e3d147b6.png

    链表必须利用指针变量才能实现

    9912596ce35ecce601cb1d54a8341a30.png

    建立简单的静态链表

    49cfdc45d301b6443322b4f9ce3d57bc.png

    建立一个如图所示的简单链表,它由3个学生数据的结点组成,要求输出各结点中的数据。

    7f774ae6011ee5e26b21065a757dcf18.png

    #include

    struct student // 声明结构体类型struct student

    {int num;

    float score;

    struct student *next;

    };

    int main()

    {struct student a,b,c,*head,*p; // 定义3个结构体变量作为链表的结点

    a.num=10101; a.score=89.5; // 对结点a的num和score成员赋值

    b.num=10103; b.score=90; // 对结点b的num和score成员赋值

    c.num=10107; c.score=85; // 对结点c的num和score成员赋值

    head=&a; // 将结点a的起始地址赋给头指针head

    a.next=&b; // 将结点b的起始地址赋给a结点的next成员

    b.next=&c; // 将结点c的起始地址赋给a结点的next成员

    c.next=NULL; // c结点的next成员不存放其他结点地址

    p=head; // 使p也指向a结点

    do

    {printf("%ld %5.1f\n",p->num,p->score); // 输出p指向的结点的数据

    p=p->next; // 使p指向下一结点

    }while(p!=NULL); // 输出完c结点后p的值为NULL,循环终止

    return 0;

    }

    共用体类型

    有时想用同一段内存单元存放不同类型的变量。

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

    定义共用体类型变量的一般形式为:

    union 共用体名

    { 成员表列

    }变量表列;

    union Data

    { int i;

    char ch;

    float f;

    };

    union Data a,b,c;

    “共用体”与“结构体”的定义形式相似,但它们的含义是不同的。

    结构体变量所占内存长度是各成员占的内存长度之和,每个成员分别占有其自己的内存单元。而共用体变量所占的内存长度等于最长的成员的长度。

    引用共用体变量的方式

    只有先定义了共用体变量才能引用它,但应注意,不能引用共用体变量,而只能引用共用体变量中的成员。

    例如,前面定义了a,b,c为共用体变量,下面的引用方式是正确的:

    a.i a.ch a.f

    共用体类型数据的特点

    同一个内存段可以用来存放几种不同类型的成员,但在每一瞬时只能存放其中一个成员,而不是同时存放几个。

    可以对共用体变量初始化,但初始化表中只能有一个常量。

    共用体变量中起作用的成员是最后一次被赋值的成员,在对共用体变量中的一个成员赋值后,原有变量存储单元中的值就取代。

    共用体变量的地址和它的各成员的地址都是同一地址。

    不能对共用体变量名赋值,也不能企图引用变量名来得到一个值

    以前的C规定不能把共用体变量作为函数参数,但可以使用指向共用体变量的指针作函数参数。C99允许用共用体变量作为函数参数。

    共用体类型可以出现在结构体类型定义中,也可以定义共用体数组。反之,结构体也可以出现在共用体类型定义中,数组也可以作为共用体的成员。

    ab4baf756de3dd4448f90cc016f35dae.gif

    1679455454f508b0ae906192a9787a77.png

    有若干个人员的数据,其中有学生和教师。学生的数据中包括:姓名、号码、性别、职业、班级。教师的数据包括:姓名、号码、性别、职业、职务。要求用同一个表格来处理。

    #include

    #include

    #define LEN sizeof(struct student)

    struct student

    {long num;

    float score; struct student *next;

    };

    int n;

    struct student *creat()

    {struct student *head;

    struct student *p1,*p2;

    n=0;

    p1=p2=( struct student*) malloc(LEN);

    scanf("%ld,%f",&p1->num,&p1->score);

    head=NULL;

    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 *head)

    {struct student *p;

    printf("\nNow,These %d records are:\n",n);

    p=head;

    if(head!=NULL)

    do

    {printf("%ld %5.1f\n",p->num,p->score);

    p=p->next;

    }while(p!=NULL);

    }

    int main()

    {struct student *head ;

    head=creat();

    print(head);

    return 0;

    }

    算了我也没懂嘿嘿这个用到再仔细研究吧。

    毕竟是小白,从小白视角看可能不会太深,但像我一样的小白应该都能看懂。

    这篇博客主要是写给新手的,希望大家都能学懂学好,嘿嘿,写的不好还望大佬勿喷。

    展开全文
  • #include #include struct Node { char str[20]; };...字符串不能直接赋值,需要引入头文件String.h....补充一个判断字符串是否相等的函数 strcmp(str1,str2); 判断st1和str2是否相等,如果相等则返回0.
    #include<string.h>
    #include<stdio.h>
    
    struct Node
    {
        char str[20];
    };
    
    int main()
    {
    
        Node n;
        char str[20]="Hello";
        strcpy_s(n.str,20,str);
        printf("%s",n.str);
        return 0;
    }

    字符串不能直接赋值,需要引入头文件String.h.调用函数 strcpy_s(str1,20,str2);把str2的字符串赋值给str1.20是指定字符的长度。

     

    补充一个判断字符串是否相等的函数 strcmp(str1,str2); 判断st1和str2是否相等,如果相等则返回0.

    展开全文
  • 会用到判断栈是否为空的方法,其实原理就是判断栈顶指针和栈底指针是否相等。 清空栈和遍历输出 清空栈是从栈顶开始,逐个的删除所有的节点,这边需要注意的是不能直接删除并且移动栈顶指针,这样就找不到被删除的...

    stack(栈)是一中运算受限的线性表,它是先进后出,包含栈顶和栈底,并且只允许在栈顶进行插入删除等操作,会包含俩种,静态栈和动态栈,其实就是数组实现的栈和链表实现的栈,这边实现的是用链表实现的栈。

    a4c4962f0e8d?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

    主要是实现这些栈常用的方法。

    数据结构

    定义栈的数据结构,包含一个栈顶一个栈底。初始值栈顶和栈底都同时指向同一个节点。节点包含一个pnext 和一个value。

    a4c4962f0e8d?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

    初始化init方法

    前面能看到栈的数据结构,所以能联想到初始化方法其实就是创建一个节点,并且把栈的栈顶和栈底指针都指向这个节点。

    a4c4962f0e8d?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

    Push&Pop方法

    既然是栈,肯定设计到push和pop操作。push操作会添加一个新节点指向栈顶节点,并且把栈顶的指针移动到新节点,pop是把栈顶指针移动到栈顶指针指向节点的下一个节点,并且释放栈顶节点。

    a4c4962f0e8d?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

    会用到判断栈是否为空的方法,其实原理就是判断栈顶指针和栈底指针是否相等。

    清空栈和遍历输出

    清空栈是从栈顶开始,逐个的删除所有的节点,这边需要注意的是不能直接删除并且移动栈顶指针,这样就找不到被删除的节点了,而是要在删除的同时要释放。遍历输出和清空的思想差不多,从栈顶开始,逐个打印节点的value值。

    a4c4962f0e8d?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

    展开全文
  • c语言学习结构体

    2019-11-30 23:11:22
    struct 结构体名称 { 结构体成员变量1; 结构体成员变量2; 结构体成员变量3; ……; };// 结构体是一种集合,它里面包含了多个变量或数组,类型可以相同也可以不相同。 eg: struct st- +名称 一般这样...
  • c语言-结构体练习

    2021-06-04 23:24:18
    若二者相等,则输出两个学生的全部信息。 #include<stdio.h> struct student {int number; char name[4]; float grade; }a,b; //定义结构体 int main() { printf("请输入第一个学生的信息:\n"); ...
  • 小白来学C语言结构体

    千次阅读 多人点赞 2020-06-29 23:22:27
    } 前面设了一个结构体,里面包含name和count,后面leader是数组名3是数组长度 L、Z、S就是三个人的名字,有10个人投票,strcmp是判断两个字符是否i相等,是就为0,不是就为1。 结构体指针 指向结构体变量的指针 ...
  • 结构体
  • 百度上说判断结构体相等只能逐项比较,那如果在编写ADT时需要这么一个函数,怎么编写?是在C语言中指导指导我算法就可以,谢谢各位!
  • c语言struct结构体大小计算

    万次阅读 多人点赞 2019-03-28 14:10:26
    直入主题,要判断一个结构体所占的空间大小,大体来说分三步走: 1.先确定实际对齐单位,其由以下三个因素决定     1> CPU周期     WIN  vs  qt  默认8字节对齐    ...
  • 咱们知道,C语言中有许多基本数据类型,比如int型,float型,double型等,我们经常使用这些基本数据类型来表达一些简单的数据,比如一个人的年龄可以用 int 型数据来表示,一本书的价格可以用 float 型数据来表示...
  • 本练习题目是谭浩强C中的7.14,并做了简单修改。 已知十名学生和其相应的五门课程成绩。(1)求五门课程的各自平均...typedef struct Student{ //学生结构体 char name[32]; double score[5]; }Student; int mai...
  • C语言中不同类型的结构体的指针间可以强制转换,很自由,也很危险。只要理解了其内部机制,你会发现C是非常灵活的。一.结构体声明如何内存的分布,结构体指针声明结构体的首地址,结构体成员声明该成员在结构体中的...
  • //产品按金额排序,如果金额相等按编号排序,并得到总和//1.定义1个结构体数组//2.从键盘获取结构体数据,函数形参是指向结构体的指针,和产品个数,实参结构体数组和产品个数//3.交换数据函数char类型交换;int类型...
  • C语言中没有复数运算,只有实数运行,为此,用结构体定义复数,并实现其四则运算
  • C语言结构体对齐问题 收藏 关于C语言中的结构体对齐问题1,比如: struct{short a1;short a2;short a3;}A;struct{long a1;short a2;}B;sizeof( A)=6, sizeof( B)=8,为什么?注:sizeof(short)=2,sizeof(long)=4因为:...
  • C语言sizeof求结构体数组长度C语言sizeof求结构体数组长度#include typedef struct ss{char a;//偏移量为0,大小为1,0能被1整除,=1short b;//偏移量为1,大小为2,1不能被2整除,=1+1+2=4int c;//偏移量为4,大小为4...
  • 结构体是在C语言中用户自定义的变量类型,它可以由若干个类型的变量组成。结构体变量、结构体数组常用于对多个包含多项属性的成员的处理。 设计程序统计得票是对结构体的简单应用,代码如下: #include <stdio.h&...
  • C语言结构体的对齐

    2013-05-04 15:58:56
    <!-- p {margin-bottom:0.08in; direction:ltr; ... color:rgb(0,0,0);...C语言结构体的字节对齐原则 为什么要对齐?现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访
  • 关于结构体内存分配机制的详解。 直接上例子。 typedef struct strdent1 { int a; //4字节 char b; //1字节 char c[3]; //3字节 }std1; //4+1+3=8 typedef struct strdent2 { char a[3]; /...
  • C语言应用结构体排序的方法

    千次阅读 2018-10-13 16:23:15
    1.定义一个结构体 typedef struct Stu{ char name[10]; int id; int score; }stu; 2.定义排序(回调)函数: /*定义排序函数*/ int cmp(const void *a,const void *b){ stu c = *(stu*)a; stu d...
  • // //函数3,判断两个size是否相等。 // dengSize(sizes);    //5.(***)创建一个Rect结构体,包含origin,size两个变量。其中origin是Point类型的,size是Size类型的。  //并写以下函数:  //...
  • 结构体指针变量指向一个结构体变量数组的时候,此时指针变量的值就是结构体数组的首地址 关于如何定义结构体数组,和将结构体指针指向结构体变量数组,不是重点。 重点是,明白结构体指针的是怎么移动的, 我个人...
  • C语言结构体实现简易通讯录

    千次阅读 2018-05-10 15:33:17
    所以自然而然就想到使用结构体,一个结构体是一个人的信息,那么要存储1000个人的信息,就需要一个元素为1000个,元素类型为结构体类型的数组来存储,为了方便,我们将这个数组再放进一个结构体中,这样程序可读性...
  • 结构体结构体是一中构造数据类型 结构体的用途是把不同类型的数据组合成一个整体,相当于自定义数据类型 1.1 结构体的定义: struct [结构体名称] { 类型标识符 成员名称; 类型标识符 成员名称; 类型...
  • 通俗的来说,值传递只是把变量的值当做参数传递进子函数中,无论函数体...下面来演示一下c语言中如何改变结构体中的变量值: #include <stdio.h> #include <stdlib.h> typedef struct Table{ int * he

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,299
精华内容 4,519
关键字:

c语言判断结构体相等

c语言 订阅