C语言中字符数组初始化的几种方法「建议收藏」

C语言中字符数组初始化的几种方法「建议收藏」1.C语言中的字符数组初始化在C语言中,字符串是当做字符数组来处理的;所以字符串有两种声明方式,一种是字符数组,一种是字符指针。1.1直接逐个初始化字符数组:字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素。charstrr[]={‘I’,”,’a’,’m’,”,’h’,’a’,’p’,’p’,’y’};注意:如果花括号中提供的字符个数大于数组长度…

大家好,又见面了,我是你们的朋友全栈君。

欢迎关注我的微信公众号:CurryCoder的程序人生

在这里插入图片描述

1.C语言中的字符数组初始化

  • 在C语言中,字符串是当做字符数组来处理的;所以字符串有两种声明方式,一种是字符数组,一种是字符指针。
  • 1.1 直接逐个初始化字符数组:字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素。
        char strr[] = {'I',' ','a','m',' ','h','a','p','p','y'};
    
  • 注意:如果花括号中提供的字符个数大于数组长度,则按语法错误处理;若小于数组长度,则只将这些字符数组中前面那些元素,其余的元素自动定为空字符(即’\0’)
  • 1.2 用字符串常量来初始化字符数组:在c语言中,将字符串作为字符数组来处理。因此可以使用字符串来初始化字符数组
        char str[] = {"I am happy"};
        // 也可以去掉{}
        char str[] = "I am happy";
    
  • 注意:上述这种字符数组的整体赋值只能在字符数组初始化时使用,不能用于字符数组的赋值,字符数组的赋值只能对其元素一一赋值,下面的赋值方法是错误的。
        char str[];
        str = "I am happy";  //错误,字符数组的赋值只能按元素一一赋值(错误的原因: C语言并没有提供可以直接操作字符串的运算符;“=”可以用于其他数据类型的赋值,但是不可以直接给字符串赋值
    
  • 这是字符数组初始化的两种方式,但是这两种方式其实是不等价的;它们的数组长度不同.
        #include "iostream"
        #include "cstring"
    
    
        using namespace std;
    
    
    
        int main(){
            /*字符数组初始化*/
            // 第一种初始化的方法
            char str[10] = {'I',' ','a','m',' ','h','a','p','p','y'};  // 少了\0,输出会出现问题
            cout << "str=" << str << ",sizeof(str)=" << sizeof(str) << endl;
            // 第二种初始化的方法
            char str1[] = "I am happy";  // 等价于char str1[] = {"I am happy"};
            char str2[] = "python";
            // char str2[] = {'p', 'y', 't','h','o','n'}与char str2[] = "python"不等价
            // char str2[] = {'p', 'y', 't','h','o','n', '\0'}与char str2="python"等价
            char str3[] = {'p', 'y', 't','h','o','n'};
            char str4[] = {'p', 'y', 't','h','o','n', '\0'};
            
            int num_str2 = sizeof(str2);
            int num_str3 = sizeof(str3);
            int num_str4 = sizeof(str4);
            
            cout << "str2与str3不等价\n";
            cout << "str2 = " << str2 << ",sizeof(str2) = " << num_str2 << endl;
            cout << "str3 = " << str3 << ",sizeof(str3) = " << num_str3 << endl;
            cout << "str2与str4等价\n";
            cout << "str2 = " << str2 << ",sizeof(str2) = " << num_str2 << endl;
            cout << "str4 = " << str4 << ",sizeof(str4) = " << num_str4 << endl;
            return 0;
        }
    
  • 1.3 字符指针:在C语言中我们也可以使用字符指针来存储字符串
  • 字符指针初始化:
        char *str = "python";
    
  • C语言对字符串常量是按照字符数组来处理的,在内存中开辟了一个字符数组用来存放字符串常量,程序在定义字符串指针变量str时,只是把字符串首地址赋值给str。 输出:
        cout << str << endl;
    
  • 系统首先输出str指向的字符,而后自加1,直至遇到’\0’;与数组的输出方式相同。字符指针的赋值:
        char *str;
        str = "python";  // 对于字符指针这种赋值方式是正确的,与字符数组不同
    

2.总结

  • 在C语言中并没有直接提供字符串的操作,其字符串操作是通过转化为字符串完成的,例如字符数组,字符指针,其本质是对字符的操作。
  • 作为字符数组,与普通数组相同,区别在于它的每一个元素是一个字符,所以不可以直接用“=”对字符数组赋值(parr[]=”python”,是错误的赋值方式),但是可以对每一个元素进行赋值(charr[12]=’\0’是正确的)。
  • 字符串一定是以’\0’结尾的;字符数组和字符指针我们当做字符串整体初始化,系统会自动添加’\0’;对于字符数组,如果采用单个字符的方式进行初始化或者赋值一定要考虑结束符’\0’.

3.参考博客

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/161062.html原文链接:https://javaforall.net

(0)
上一篇 2022年7月18日 下午7:46
下一篇 2022年7月18日 下午8:00


相关推荐

  • FormData用法详解

    FormData用法详解FormData 对象 一 创建一个 formData 对象实例的方式 1 创建一个空对象 varformData newFormData 通过 append 方法添加数据 2 使用已有表单来初始化对象 表单示例 lt formid myForm action method post gt lt inputtype text name

    2026年3月20日
    2
  • java 数字信封_本地证书实现数字信封加解密demo-java

    java 数字信封_本地证书实现数字信封加解密demo-java实例简介 提供获取加密证书接口 数字信封加密以及数字信封解密接口源码 IDEA 编译 测试数据符合标准 openssl 测试的时候要注意证书和私钥的存放路径 实例截图 核心代码 SealEnvelope OpenEnvelope demo SealEnvelope OpenEnvelope demo out production test

    2026年3月17日
    2
  • OpenClaw 从新手到中级完整教程

    OpenClaw 从新手到中级完整教程

    2026年3月13日
    2
  • 数仓建模—数据安全「建议收藏」

    数仓建模—数据安全「建议收藏」数据安全差分隐私差分隐私是用来防范差分攻击的,差分隐私(英语:differentialprivacy)是密码学中的一种手段,旨在提供一种当从统计数据库查询时,最大化数据查询的准确性,同时最大限度减少识别其记录的机会比如有一群人出去聚餐,那么其中某人是否是单身狗就属于差分隐私。为了更形式化地描述差分隐私,我们需要先定义相邻数据集。现给定两个数据集D和D’,若它们有且仅有一条数据不一样,那我们就称此二者为相邻数据集。那么对于一个随机化算法(所谓随机化算法,是指对特定输入,该算法的输出不是固定值,而是服

    2022年5月21日
    50
  • mysql 主键分区

    mysql 主键分区mysql 主键分区通常对于数据比较多的表 可以采用字段分区 一般是 id 首先需要把 id 指定为 bigint 20 类型 然后进行 id 分区 ALTERTABLE sh ad hit PARTITIONBYR id PARTITIONS21 PARTITION p0 VALUESLESSTH PARTITION p1 VALUESL

    2026年3月17日
    2
  • 未来最有市场发展前景的十大通信技术企业_各行业发展前景

    未来最有市场发展前景的十大通信技术企业_各行业发展前景未来最有市场发展前景的十大通信技术2003-03-2410:39/(通讯世界)  通信技术的发展已经脱离纯技术驱动的模式,正在走向技术与业务相结合、互动的新模式,从世界范围内,预计在未来十年,从市场应用和业务需求的角度看,最大和最深刻的变化将是从语音业务向数据业务的战略性转变,这种转变将深刻影响通信技术的走向。

    2025年10月27日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号