C语言中结构体基本知识

1 声明结构体

声明结构体 关键字struct 结构体名字 {类型修饰符 成员名};
声明一个学生的结构体

第一种方法

struct student{
    char name[20]; // 结构体成员中可以使用另外的构造类型.
    int number;   // 每个成员之间使用;隔开.
    int age;
    float score;
};

typedef struct student Student; // 将现有的类型修饰符该别名为 Student

关键词 typedef 用于改别名
第二种方法
typedef struct teacher{
    char name[20];
    char gender;
    int age;
    char major[20];
    
}Teacher;

第二种最常用

结构体声明写在main函数上边或写在.h文件中

2 结构体的使用(在main函数中)

struct teacher tea1 = {"shenqingchang",‘m‘,23,‘c‘};
   // 结构体成员变量不能使用变量名全部输出成员信息
     printf("%s",tea1);不对的输出

正确输出

printf("%s",tear1.name);

修改成员名
    int a = 0;
    a = 10;
    修改第一名老师的年龄为 15
    tear1.age = 15;
    printf("%d",tear1.age);
    // 修改第一名老师的名字为"dingchuyuan"
    tear1.name = "dingchuyuan"; // 错误的修改方式
    strcpy(tear1.name, "dingchuyuan");
    printf("%s\n",tear1.name);
修改或输出结构体时,成员变量需要结构体名加"."加变量名才能用

举例 tear1.name = "zhangsan" 这样写才能修改

3 结构体内存占用空间
    1 结构体成员变量,储存是从上至下,从第一开始储存
    2 在内存中,储存成员变量时,规则是: 个数据类型的倍数储存,如果被占用,向下延伸
    3 计算结构体成员的空间,总和数 = 成员变量中最大字节数的最小倍数
4 结构体在函数中的运用

结构体运用在函数中需要写在.h的声明文件中,其它和函数没有太大区别

举例

A 声明结构体

#import <Foundation/Foundation.h>

// 使用声明函数
typedef struct teacher{
    char name[20];
    int age;
    float score;
    
}Teacher;
// 打印所有老师信息
void showInfoOfTeachers(Teacher array[],int count);

B 实现(定义)函数

#import "Teacher.h"

//输出所有老师信息
void showInfoOfTeachers(Teacher array[],int count){
    printf("老师信息:\n");
    for (int i = 0; i < count; i++) {
        printf("%-20s %-2d %.2f\n",array[i].name,array[i].age,array[i].score);
    }
}

C调用函数在main函数里

Teacher tea[4] = {
        {"wangke",25,90},
        {"sunning",40,89},
        {"xulaoshi",50,78},
        {"wangcuiling",35,91}

showOfTeachers(tea, 4);

时间: 2024-12-30 02:10:16

C语言中结构体基本知识的相关文章

C语言中结构体赋值问题的讨论(转载)

今天帮师姐调一个程序的BUG,师姐的程序中有个结构体直接赋值的语句,在我印象中结构体好像是不能直接赋值的,正如数组不能直接赋值那样,我怀疑这个地方有问题,但最后证明并不是这个问题.那么就总结一下C语言中结构体赋值的问题吧: 结构体直接赋值的实现 下面是一个实例: #include <stdio.h> struct Foo { char a; int b; double c; }foo1, foo2; //define two structs with three different field

C语言中结构体参数变量的传递

c语言  结构体  函数  参数  传递 一.前言 本文中的程序实现对员工信息结构体字段赋值并打印出来的功能.该结构体的定义如下: // 员工信息结构体 typedef struct {        INT8       szEmployeeName[100];     // 员工姓名        UINT16  iEmployeeAge;                    // 员工年龄        UINT32  iEmployeeNo;                      

c语言中结构体指针

1.指向结构体的指针变量: C 语言中->是一个整体,它是用于指向结构体,假设我们在程序中定义了一个结构体,然后声明一个指针变量指向这个结构体,那么我们要用指针取出结构体中的数据,就要用到指向运算符"->". 举例说明: struct SunLL { int a; int b; int c; }; struct SunLL  * p;               //定义结构体指针 struct SunLL A = {1,2,3};    //定义一个SunLL类型的变量A

C语言中结构体变量之间赋值

最近,我阅读了某新员工小刘写的C语言代码,发现其对结构体变量之间的赋值不是很熟悉.对于两个相同类型的结构体变量,他均采用的是逐个成员变量直接赋值的形式.如下的代码示例: 如上代码所示,tEmployeeInfoSrc和tEmployeeInfoDest是两个类型相同的结构体变量,tEmployeeInfoSrc(源结构体变量)中的各个成员变量已赋初值.现要使tEmployeeInfoDest(目的结构体变量)中的各个成员变量的值与tEmployeeInfoSrc中对应成员变量的值相同.小刘采用的

C语言中结构体在函数中的应用

一.结构体与函数参数结构体作函数参数可分为传值与传指针.1.传值时结构体参数会被拷贝一份,在函数体内修改结构体参数成员的值实际上是修改调用参数的一个临时拷贝的成员的值,这不会影响到调用参数.在这种情况下,由于涉及到结构体参数的拷贝,程序空间及时间效率都会受到影响,所以这种方法基本不用.例如:typedef struct tagSTUDENT{char name[20];int age;}STUDENT; void fun(STUDENT stu){printf("stu.name=%s,stu.

语言中结构体变量和结构体类型的定义

1.结构体类型定义 定义方式1: Typedef struct  LNode {    int  data;  // 数据域    struct LNode   *next;  // 指针域 } *LinkList; 定义方式2: struct  LNode {    int  data;  // 数据域    struct LNode   *next;  // 指针域 }: Typedef struct  LNode  *LinkList; 以上两个定义方式是等价的,是将*LinkList定义

c语言中结构体的定义、初始化及内存分配

#include <stdio.h> struct person { char *name; int age; }; int main() { //结构体可以定义在函数内,也可以定义到函数外 //相当于全局变量与局部变量 // struct person // { // char *name; // int age; // }; struct person p1; //补齐算法,分配的存储空间为结构体中占用内存最大成员所占用内存的整数倍 //person结构体中占用内存最大的成员为指针,占用8

黑马程序员--C语言中结构体-我之理解

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------- 什么是结构体? “结构”是一种构造类型,它是由若干“成员”组成的.每一个成员可以是一个基本数据类型或者又是一个构造类型. 为什么要有结构类型? 结构体可以把功能相同的数据组织起来,存在一起,用的时候方便,而且在调用函数时,若 传递参数较多

浅谈C语言中结构体的初始化

转自:http://www.jb51.net/article/37246.htm <代码大全>建议在变量定义的时候进行初始化,但是很多人,特别是新人对结构体或者结构体数组定义是一般不会初始化,或者不知道怎么初始化.1.初始化 复制代码代码如下: typedef struct _TEST_T {        int i;        char c[10];}TEST_T;TEST_T gst  = {1, “12345”};//可以初始化,设置i为1,s为一个字符串.TEST_T gst