C语言基础学习第八天,string函数族和结构体

1. string函数族

#include <string.h>

1.1 strlen

功能:字符串中实际字符的个数

参数:字符串的首地址

返回值:字符的个数

1.2 strcpy

功能:对字符串进行复制

参数:1:char * 目标首地址 复制的位置     2:char *源首地址 复制的内容

返回值:目标首地址

1.3 strncp

功能:对字符串前n项进行复制

参数:1:char * 目标首地址 复制的位置     2:char *源首地址 复制的内容     3: int n:个数

返回值:目标首地址

1.4 strcat

功能:对字符串拼接

参数:1:char * 目标首地址 拼接的字符串       2:char *源首地址 拼接的内容

返回值:目标首地址

 1.5 strncat

功能:对字符串拼接

参数:1:char * 目标首地址 拼接的字符串      2:char *源首地址 拼接的内容     3:个数

返回值:目标首地址

1.6 strcmp

功能:比较字符串的大小

参数:1:char * 目标首地址 s1 要比较的字符串 2:char *源首地址s2 要比较的字符串

返回值:

s1>s2 : >0

s1=s2 : 0

s1<s2 : <0

比较规则:

从字符串的首个字符开始比较ascii码值,比较相等继续向后,不等输出相减结果

1.7 strncmp 

功能:比较字符串的大小

参数:1:char * 目标首地址 s1 要比较的字符串 2:char *源首地址s2 要比较的字符串 3:个数

返回值:

s1>s2 : >0

s1=s2 : 0

s1<s2 : <0

2. 结构体 

2.1 定义

定义:用户自定义的数据类型,在结构体中可以包含若干不同数据类型的成员变量(也可以相同),使这些数据项组合起来反映某一个信息。

格式:

struct 结构体名

{

数据类型 成员变量1;

数据类型 成员变量2;

数据类型 成员变量3;

、、、、

};

struct demo
{
    char name[32];
    int age;
    char b;
    float c;
};

2.2 结构体变量

        2.2.1 定义

概念:通过结构体类型定义的变量

格式:struct 结构体名 变量名;

struct demo ret;

定义结构体的同时定义变量

struct demo
{
    char name[32];
    int age;
    char b;
    float c;
}d1;

定义结构体时缺少名称的同时定义变量

struct 
{
    char name[32];
    int age;
    char b;
    float c;
}d1,d2;

        2.2.2 赋值

1. 通过大括号的方式赋值

struct demo ret={"name",18,'a',1.22};

2. 定义之后赋值

struct demo t;
    t.b = 'a';
    t.age = 10;

 3. 点等法

struct demo ret={
        .c=1.99,
        .b=10
    };

        2.2.3 访问 

通过.(点)访问: 结构体变量名.成员变量名

struct  student stu;
scanf("%d %d %f",&stu.id,&stu.age,&stu.score);
printf("%d   %d  %f",stu.id,stu.age,stu.score);

2.3 重定义

格式:typedef 旧名 新名

typedef int size_t

size_t 的意义和int 是一样的,只不过就是名字不一样而已。

定义:

typedef struct  student
{
    int id;
    int age;
    float score;
}STU;

2.4 结构体数组

使用结构体定义的数组

        2.4.1 定义

struct  student
{
    int id;
    int age;
    float score;
    char name[32];
}s1[3];

        2.4.2 赋值

struct student
{
    int id;
    int age;
}s2[3] = {
    {10, 11},
    {12, 1},
    {1, 2}};

        2.4.3 遍历结构体数组

typedef struct student STU;
STU s1[3];
for (int i = 0; i < 3; i++)
{
    // 输入
    scanf("%d%d", &s1[i].id, &s1[i].age);
}
for (int i = 0; i < 3; i++)
{
    // 输出
    printf("%d   %d\n", s1[i].id, s1[i].age);
}

2.5 结构体大小

        按照字节对齐原则开辟,64位和8进行比较,用成员变量中最大的数据类型进行比较,<8:按照小的开辟 >8:按照8开辟

//什么意思呢,我们举个例子
struct stu
{
    //以最大的数据类型开辟,他们三个int最大为4,所以每次开辟要开辟4个
    char a;//4
    int b;//4
    short c;//4
};// 所以这个结构体的大小是12


struct stu2
{   //这个情况就是,char开辟4个,但是他只占了1个,下面的short还能够存进去,所以他们两个共用一块空间
    char a;
    short b;//4
    int c;//4
};//这个结构体大小就是8

2.6 结构体指针

概念:结构体类型的指针

定义:struct 结构体名 * 指针变量名

struct student *p=&stu;

赋值:

格式:指针变量名->成员变量名

struct student *p=&stu;
p->a=20;
p->id=10;
strcpy(p->name,"1234567");

结构体指针大小:8字节

2.7 总结

1. 不能把结构体类型变量作为整体引用,只能对结构体类型变量中的各个成员变量分别引用。即:stu.id可以输出 直接输出stu不行 stu整体不行必须具体到每一个成员变量

2. 如果成员变量本身属于另一种结构体类型,用若干个成员运算符一级级找到最低级的成员变量

3. 可以把成员变量当成普通变量运算(++ --都可以)

4.结构体变量可以相互赋值

5.结构体定义时尽可能压缩,减少空间浪费

欢迎大家指正!!!

  • 22
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值