• C 基础语法2 —— 数组


    1. 一维数组

    • 数组名称可以作为数组的首地址使用,即a[10]来说,a = &a[0]。a可以直接赋值给指针变量,如 int* p = a(或写成 p = &a[0]),即把数组a[10]的首地址赋给p
    #include
    
    //打印数组里每一个元素,数组传递时,元素个数传递不过去
    void print(int b[],int len)//这里只传递了数组起始地址,不知道数组有多长
    {
        int i;
        for (i = 0; i < len; i++)
        {
            printf("a[%d] = %d\n", i, b[i]);
        }
        b[4] = 20;//在子函数中修改数组元素
    }
    
    int main()
    {
        //定义数组就是写一个变量,后面加一个方括号,方括号里写上整型变量
        //定义数组的一瞬间,数组占据的空间就确定下来了。
        //看任何变量的内存,都是将该变量取地址,拖入内存窗口来看
        int a[10] = { 1,2,3,4,5 };
        //a[10] = 1;//访问越界,访问了不属于自己的空间
        print(a, 5);
        printf("a[4] = %d\n", a[4]);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    2. 字符数组(字符串)

    • %c 是输入单个字符,%s是输入一个字符串到字符数组里
    • %c可以识别空格和换行符并将其输入,%s通过空格或换行识别一个字符串的结束
    • 字符数组(字符串)名称本身就代表这个数组的第一个元素的地址,所以在scanf中不需要加取地址运算符
    • 字符数组是由若干个char类型的元素组成,所以字符数组的每一位都是char型的字符。数组末尾都会有一个空字符\0,表示存放的字符串的结尾。
    #define _CRT_SECURE_NO_WARNINGS
    #include
    
    //初始化字符数组时,一定要让字符数组的大小比看到的字符串的长度多1
    int main()
    {
        char c[6] = { 'h','e','l','l','o' };//填5就是错了,因为加了一个\0的位置
        char d[5] = "how";
        printf("%s---%s\n", c, d);//printf的%s,对应后面要写的字符数组名,字符串常量
        char e[20],f[20];
        scanf("%s%s", e, f);//字符串数组前不用加取地址符&,scanf读取字符串
        printf("%s---%s\n", e, f);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    3. 字符数组的传递

    • %c可以识别空格和换行符并将其输入,%s通过空格或换行识别一个字符串的结束,即
    #define _CRT_SECURE_NO_WARNINGS
    #include
    
    void print(char d[])//我们把d称为形参,c称为实参
    {
        int i = 0;
        while (d[i] != '\0')//%c格式对应的是单个字符,%s格式对应的是字符串,char a与char a[10]的区别
        {
            printf("%c\n", d[i]);//字符数组去输出某一个元素时,用%c
            i++;
        }
        printf("\n");
        //修改字符串数组中的字符串的内容,把首字母变成大写
        d[0] = d[0] - 32;
    }
    
    int main()
    {
        char c[10] = "hello";//字符串最后有\0,需要占据一个位置
        print(c);//调用函数print,使d=c
        printf("%s\n", c);
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    4. gets与puts

    #define _CRT_SECURE_NO_WARNINGS
    #include
    
    int main()
    {
        char c[20];//字符数组的数组名里存的就是字符数组的起始地址,类型是字符指针
        //不能使用gets的VS,VS2017请使用下面操作
         fgets(c,sizeof(c),stdin);//与gets(c)是一样的
        //c是一个字符数组,但编译器给c内部存了一个值,c里面值的类型是字符指针。
        gets(c);//gets只能读取字符串,当一次读取一行时,使用gets
        puts(c);//等价于printf("%s\n",c);
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    5. string函数使用

    • strlen():得到字符数组中第1个\0之前的字符的个数
    • strcmp():返回两个字符串大小的比较结果,比较原则是按字典序,越靠后值越大
    • strcpy():把一个字符串赋值给另一个字符串
    • strcat():把一个字符串接到另一个字符串后面
    #define _CRT_SECURE_NO_WARNINGS
    #include
    #include
    //strlen统计字符串的长度
    //strcpy将某个字符串复制到字符数组中
    //strcmp用于比较两个字符串的大小
    //strcat用于将两个字符串连接在一起
    //char* strcpy(char* to,const char* from);有const修饰代表这个地方可以放字符串常量
    int main()
    {
        char c[20] = "wangdao";
        printf("数组c内字符串的长度=%d\n", strlen(c));//strlen是整型,不算'\0'结果是7
        char d[20];
        //strcpy(d, c);字符数组里就是wangdao
        strcpy(d,"study");//d中放字符串常量study
        puts(d);
        //下面是看strcmp,两个字符串比较,是比较对应字符串位置的ASCII值
        printf("两个字符串比较后的结果=%d\n", strcmp("hello", "world"));//返回的是-1
        //下面是看strcat,拼接字符串,目标数组要能够容纳拼接后的字符串(7+5<20)
        strcat(c, d);
        puts(c);
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
  • 相关阅读:
    第八章 小程序后端开发
    Path with “WEB-INF“ or “META-INF“: [webapp/WEB-INF/NewFile.html]
    连续10年霸榜第一?程序员「最常用」的编程语言是它?
    如何让光从光纤平滑地进入波导?
    springboot-iconfont图标如何使用?
    Springboot----项目整合微信支付(引入延迟队列实现订单过期取消以及商户主动查单)
    Openharmony3.2 源码编译(ubuntu 22.04) 过程记录
    一些技能点&语法糖(上)
    商城多语言改造方案
    大模型重塑软件设计,南京真我加入飞桨技术伙伴,大模型生态圈成员又添一员!
  • 原文地址:https://blog.csdn.net/qq_42731062/article/details/126186942