欢迎关注我的微信公众号: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.参考博客

  • 博客链接

C语言中字符数组初始化的几种方法相关推荐

  1. C语言中调用数组元素的三种方法:下标法、数组名法、指针法

    /*调用数组元素的三种方法:下标法.数组名法.指针法*/ #include<stdio.h> int main() {int a[] = { 1,2,3,4,5 }, i, * p;pri ...

  2. (C++)字符数组初始化的两种方法

    #include<cstdio> //字符数组的两种赋值方法 int main(){//1.方法一char str1[14] = {'I',' ','l','o','v','e',' ', ...

  3. C语言中字符数组的初始化与注意事项

    在C语言中字符数组的初始化有三种常见的方法: char a[5] = {'a','b','c','d','e'};char c[] = {'a','b','c','d','e'};char b[] = ...

  4. C语言中字符数组的初始化与赋值

    1.字符数组初始化 在C语言中,字符串是当做字符数组来处理的:所以字符串有两种声明方式,一种是字符数组,一种是字符指针. 字符数组初始化 char parr[] = "zifuchuansh ...

  5. C语言中字符数组的初始化与赋值,字符串相关函数

    C语言中字符数组的初始化与赋值,字符串相关函数! 1.字符数组初始化 在C语言中,字符串是当做字符数组来处理的:所以字符串有两种声明方式,一种是字符数组,一种是字符指针. (1)直接逐个初始化字符数组 ...

  6. C语言常见问题——数组初始化的四种方法

    有一回,小易同学对我说:"你学过编程吗",我略略点一点头.他说,"学过编程,我便考一考你,在使用数组之前,应不应该初始化数组?" 我暗想,这么简单的问题,也配考 ...

  7. c语言中字符串去掉逗号,JS四种方法去除字符串最后的逗号

    window.οnlοad=function() { var obj = {name: "xxx", age: 30, sex: "female"};//定义一 ...

  8. C语言中字符数组char[] 和 字符串char*的区别

    在程序结构设计中使用结构体定义新的数据类型,如 typedef struct { int type; int value; char arg[]; } CommandInfo; 在strcpy时将一个 ...

  9. 关于C语言中字符数组和字符串的输出

    本文内容仅仅代表个人在学习中遇到的问题并作出的总结,如有错误的地方和别的想法可以联系一起学习讨论! 文章目录 前言 一.字符数组和字符串 二.过程分析 1.字符数组和字符串输出对比 2.字符数组和字符 ...

最新文章

  1. 计算机一级ppt难点,计算机一级复习.ppt
  2. linux ntptime(Network Time Protocol 网络时间协议)
  3. 百练162:Post Office
  4. 斯特林数第一类数的应用 hdu3625
  5. php 精品课程,php51精品课程高级版
  6. 让你的手机浏览器来一场AR风暴
  7. 电话光端机原理及作用分析
  8. MySQL系列(一) MySQL体系结构概述
  9. php foreach 为什么在if条件下多条数据只取出一条数据_微信大牛教你深入了解数据库索引...
  10. python里安装mysql有错_尝试在Python3.4上安装MySQL时出错
  11. 201671010129 2016—2017—2 《Java程序设计》Java总结
  12. Semantic Role Labeling (SRL)
  13. 世界地图可以无限放大_不敢相信!世界地图,你竟然骗了我这么多年...
  14. texturepacker 打包图集
  15. 【MongoDB】mongodb | 安装 | 使用 | mdb
  16. web前端期末大作业:旅游网页设计与实现——个人旅游博客(4页)HTML+CSS
  17. 《疯狂Java讲义》(第5版) 作者李刚(待重新排版)
  18. 二维码(QR code)基本结构及生成原理
  19. 基于jsp酒店管理系统设计
  20. IC617如何绘制反相器和反相器的仿真

热门文章

  1. 滴滴进入寒冬期,将裁员2000人
  2. create-react-app 2.0中使用antd(eject)
  3. 独立云计算服务商的多维实践之道:用户需求驱动变革
  4. 《Python从小白到大牛》第4章 Python语法基础
  5. 前端见微知著JavaScript基础篇:你所不知道的apply, call 和 bind
  6. CentOS下的DNS服务器搭建
  7. 关于开源网管软件选型的几点思考
  8. 别让低效努力,毁了你
  9. 用敏捷开发工具leangoo管理需求看板示例
  10. 经验总结 | 重构让你的代码更优美和简洁