在C语言编程中,当我们声明一个字符串数组的时候,常常需要把它初始化为空串。总结起来有以下三种方式:

(1) char str[10]=”“;

(2) char str[10]={”};

(3) char str[10]; str[0]=”;

第(1)(2)种方式是将str数组的所有元素都初始化为”,而第(3)种方式是只将str数组的第一个元素初始化为”。如果数组的size非常大,那么前两种方式将会造成很大的开销。所以,除非必要(即我们需要将str数组的所有元素都初始化为0的情况),我们都应该选用第(3)种方式来初始化字符串数组。

================

数组可以初始化,即在定义时,使它包含程序马上能使用的值。

例如,下面的代码定义了一个全局数组,并用一组Fibonacci数初始化:

int iArray[10]={1,1,2,3,5,8,13,21,34,55); //初始化

void main(){

//…

}

初始化数组的值的个数不能多于数组元素个数,初始化数组的值也不能通过跳过逗号的方式来省略,这在C中是允许的,但在C++中不允许。

例如,下面的代码对数组进行初始化是错误的:

int arrayl[5]={1,2,3,4,5,6}; //error: 初始化值个数多于数组元素个数

int array2[5]={1,,2,3,4}; //error:初始化值不能省略

int array3[5]={1,2,3,}; //error:初始化值不能省略

int array4[5]={}; //error:语法格式错误

void main(){

//…

}

初始化值的个数可少于数组元素个数。当初始化值的个数少于数组元素个数时,前面的按序初始化相应值, 后面的初始化为0(全局或静态数组)或为不确定值(局部数组)。

例如,下面的程序对数组进行初始化:

//*********************

//**   ch7_2.cpp  **

//*********************

#include

int array1[5]={1,2,3};

static int array2[5]={1};

void main()

{

int arr1[5]={2};

static int arr2[5]={1,2};

int n;

cout <

for(n=0; n<5; n++)

cout <

cout <

for(n=0; n<5; n++)

cout <

cout <

for(n=0; n<5; n++)

cout <

cout <

for(n=0; n<5; n++)

cout <

cout <

}

运行结果为:

global:

l  2  3  0  0

global static:

1  0  0  0  0

local:

2 23567 23567 23567 23567

local static:

1  2  0  0  0

例中,全局数组和全局静态数组的初始化是在主函数运行之前完成的,而局部数组和局部静态数组的初始化是在进入主函数后完成的。

全局数组arrayl[5]对于初始化表的值按序初始化为1,2,3,还有两个元素的值则按默认初始化为0。

全局静态数组array2[5]与全局数组的初始化情况一样,初始化表值(1)表示第1个元素的值,而不是指全部数组元素都为1。

局部数组arrl[5]根据初始化表值的内容按序初始化, 由于初始化表值只有1个,所以还有4个元素的值为不确定。在这里均为数值23567。

局部静态数组arr2[5]先根据初始化表按序初始化,其余3个数组元素的值默认初始化为0。

2.初始化字符数组

初始化字符数组有两种方法,一种是:

char array[10]={“hello”};

另一种是:

char array[10]={‘h’,’e’,’l’,’l’,”};

第一种方法用途较广,初始化时,系统自动在数组没有填值的位置用,”补上。另外, 这种方法中的花括号可以省略,即能表示成:

char array[10]=”hello”;

第二种方法一次一个元素地初始化数组,如同初始化整型数组。这种方法通常用于输入不容易在键盘上生成的那些不可见字符。

例如,下面的代码中初始化值为若干制表符:

char chArray[5]={‘t’,’t’,’t’,’t’,”);

这里不要忘记为最后的,”分配空间。如果要初始化一个字符串”hello”,那为它定义的数组至少有6个数组元素。

例如,下面的代码给数组初始化,但会引起不可预料的错误:

char array[5]=”hello”;

该代码不会引起编译错误,但由于改写了数组空间以外的内存单元,所以是危险的。

3.省略数组大小

有初始化的数组定义可以省略方括号中的数组大小。

例如,下面的代码中数组定义为5个元素:

int a[]={2,4,6,8,10};

编译时必须知道数组的大小。通常,声明数组时方括号内的数字决定了数组的大小。有初始化的数组定义又省略方括号中的数组大小时,编译器统计花括号之间的元素个数,以求出数组的大小。

例如,下面的代码产生相同的结果:

static int a1[5]={1,2,3,4,5};

static int a2[]={1,2,3,4,5};

让编译器得出初始化数组的大小有几个好处。它常常用于初始化一个元素个数在初始化中确定的数组,提供程序员修改元素个数的机会。

在没有规定数组大小的情况下,怎么知道数组的大小呢? sizeof操作解决了该问题。 例如,下面的代码用sizeof确定数组的大小:

//*********************

//** ch7_3.cpp **

//*********************

#include

void main()

{

static int a[]={1,2,4,8,16};

for(int i=0; i

cout <

cout <

}

运行结果为:

1 2 4 8 16

sizeof操作使for循环自动调整次数。如果要从初始化a数组的集合中增删元素,只需重新编译即可,其他内容无须更动。

每个数组所占的存储量都可以用sizeof操作来确定! sizeof返回指定项的字节数。sizeof常用于数组,使代码可在16位机器和32位机器之间移植:

对于字符串的初始化,要注意数组实际分配的空间大小是字符串中字符个数加上末尾的,”,结束符。

例如,下面的代码定义一个字符数组:

//*********************

//**   ch7_4.cpp  **

//*********************

#include

void main()

{

char ch[]=”how are you”;

cout <

cout <

}

运行结果为:

size of array:12

size of string:ll

例中,数组大小为12,而字符串长度为11。

省略数组大小只能在有初始化的数组定义中。

例如,下面的代码将产生一个编译错误:

int a[];//error:没有确定数组大小

在定义数组的场合,无论如何,编译器必须知道数组的大小。

c语言字符数组与字符串的使用详解

转自:http://www.jb51.net/article/37456.htm 1.字符数组的定义与初始化字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素.char str[10]={ ...

&lbrack;c语言&rsqb;字符数组、字符串定义

C语言中字符串通常用字符指针和字符数组来定义: char* pS="abcdef"; char s[]="abcdef"; 这两种方式都会在结尾为字符串隐式补结 ...

C语言字符数组和字符串

用来存放字符的数组称为字符数组,例如: char a[10]; //一维字符数组 char b[5][10]; //二维字符数组 char c[20]={'c', ' ', 'p', 'r', 'o' ...

C语言字符数组与字符串

研究几个案例: 输出图案: #include void main() { ][] = { {', ' ', ' '}, {', ' '}, {'}, {', ' '}, ...

&lbrack;日常&rsqb; C语言中的字符数组和字符串

c语言字符数组和字符串:1.存放字符的数组称为字符数组 char str[]2.'\0'也被称为字符串结束标志3.由" "包围的字符串会自动在末尾添加'\0'4.逐个字符地给数组赋 ...

C语言中字符数组和字符串指针分析

这几天搞Unix上的C程序,里面用到了很多字符数组和字符串指针,我记得在学完C语言后相当一段时间里,对指针这个东西还是模模糊糊,后来工作也没怎么 用到过C,虽然网上这类的文章也有很多,还是决定自己在这 ...

c语言中的字符数组与字符串

1.字符数组的定义与初始化 字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素. char str[10]={ 'I',' ','a','m',' ',‘h’,'a','p','p','y ...

C语言基础复习:字符,字符数组,字符串,字符指针

1. 概述2. 字符2.1 字符定义和大小2.2 字符的输入和输出2.3 字符的计算3. 字符数组3.1 字符数组的定义和大小3.2 字符数组的输入和输出3.3 字符数组的计算4. 字符串4.1 字符 ...

C语言中整形数组、字符数组、字符串的区别

一. 第一 整型数组的存放,数组最后是不加'\0'的,字符串会自动加上,因此存放字符的时候数组的大小要比实际字符的多一个 第二 整型数组 每一个单元是4个字节的,字符串是一个一个字符存放的,每个字符占 ...

随机推荐

修改Glassfish默认密码,并允许远程登录

修改默认密码 1.打开命令提示窗口,进入 glassfish/bin 目录: 2.输入命令 asadmin 进入管理模式: 接着输入: change-admin-password 注意默认密码为空,要 ...

Atitit 语音识别的技术原理

Atitit 语音识别的技术原理 1.1. 语音识别技术,也被称为自动语音识别Automatic Speech Recognition,(ASR),2 1.2. 模型目前,主流的大词汇量语音识别系统多 ...

【转】JavaScript面向对象

http://www.cnblogs.com/dolphinX/p/4385862.html 理解对象 对象这个词如雷贯耳,同样出名的一句话:XXX语言中一切皆为对象! 对象究竟是什么?什么叫面向对象 ...

fluent nhibernate 初体验

离开.net框架两年时间,发展的很快呀.原先自我感觉良好到以为只差一个MVP的考核什么的,现在觉得真的差好远了. 呵呵,废话就不多说了.这次花了两天时间才拿下fluent nhibernate的fir ...

Linux命令之ssh

一. 配置ssh 1. 命令 ssh-keygen [选项] 2. 说明 用于为“ssh”生成.管理和转换认证密钥,它支持RSA和DSA两种认证密钥 3. 选项 -C:添加注释 -f:指定用来保存密钥 ...

Windows系统基本概念

windows API:被文档化的可以调用的子例程,如CreateProcess 原生的系统服务(执行体系统服务):未被文档化的.可以再用户模式下调用的底层服务,如NtCreateProcess 内核 ...

通过expdp&sol;impdp进行oracle数据库的备份恢复详细指导

假定导出oracle数据库home目录为/opt/oracle,数据库用户为exp_user/test,导入用户为imp_user/test,给出如下样例,具体使用时根据实际情况修改路径及用户名/密码 ...

easyui 时间段校验,开始时间小于结束时间,并且时间间隔不能超过30天

//对easyui datetimebox的验证,开始时间要小于结束时间function validateDateTime(beginTimeId,endTimeId,whichTimeId){ co ...

VSCode插件开发全攻略(一)概览

文章索引 VSCode插件开发全攻略(一)概览 VSCode插件开发全攻略(二)HelloWord VSCode插件开发全攻略(三)package.json详解 VSCode插件开发全攻略(四)命令. ...

使用FormData格式在前后端传递数据

为什么一定要使用formdata格式……很大原因是因为当时我犯蠢…… 前端肯定是JS了,具体不写了,使用Postman测试,后端语言是Java,框架Spring Boot,使用IntelliJ IDE ...

c语言怎么把字符串转数组,【转】C语言 字符数组与字符串相关推荐

  1. C语言常量(整型、实型、字符型、字符串、符号常量)

    对于C语言常量,该文章有详讲,由于文章太长,可参考如下思维导图和目录,可通过目录选择自己所需要的内容阅读. 直接常量 1.整型常量 整型常量即整数,包括正整数.负整数和零.C语言中,整型常量可以用十进 ...

  2. java传入一个字符串 将它分割成大写字符为首的字符串数组

    /*      * 传入一个字符串 将它分割成大写字符为首的字符串数组      */     private ArrayList<String> splitByUpperCase(Str ...

  3. 课后习题5.13 编写一程序,将两个字符串连接起来,结果取代第一个字符串。 (1)用字符数组,不用stract函数(即自己写一个具有stract函数功能的函数); (2)用标准库中的stract函数;

    课后习题5.13 编写一程序,将两个字符串连接起来,结果取代第一个字符串. (1)用字符数组,不用stract函数(即自己写一个具有stract函数功能的函数): (2)用标准库中的stract函数: ...

  4. typedef 字符串_typedef在C中使用字符数组(定义别名来声明字符串)的示例

    typedef 字符串 Here, we have to define an alias for a character array with a given number of maximum ch ...

  5. 为什么不能用赋值语句将一个字符串常量直接赋给一个字符数组?

    不能直接赋值,这是一定的,因为有太多的不确定性,容易发生错误 赋值可以使用strcpy函数,strncpy函数,或者sprintf函数都行,直接等于是不行的~~~~ 规定不能整体引用,只能单个引用赋值 ...

  6. 一维数组、数组排序、字符数组

    //   定义了一个整形数组,数组中有5个元素 //    使用数组元素:数组名[下标],下标从0开始,到元素个数减去1 //    int array[5] = {1 ,3, 6, 5, 4}; / ...

  7. 给字符数组赋值java_给字符数组赋值的方法

    main() { char s[30]; strcpy(s, "Good News!"); /*给数组赋字符串*/ . . . } 上面程序在编译时, 遇到char s[30]这条 ...

  8. C语言字符数组与字符串的使用及加结束符‘\0‘的问题

    1.字符数组的定义与初始化 字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素. char str[10]={ 'I',' ','a','m',' ','h','a','p','p','y ...

  9. 【C 语言】字符串操作 ( C 字符串 | 字符数组始化 )

    文章目录 一.C 字符串 二.字符数组始化 一.C 字符串 C 字符串特征 : C 语言中的字符串都是以 '\0'字符 结尾的 字符数组 ; C 字符串本质 : C 中 没有字符串类型 , 都是使用 ...

  10. android 数组赋值字符串_c语言中的字符数组与字符串

    1.字符数组的定义与初始化 字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素. char str[10]={ 'I',' ','a','m',' ','h','a','p','p','y ...

最新文章

  1. python flask 部署_如何进行Python Flask项目的部署?
  2. python - 多线程简单实现
  3. 腾讯2013暑期实习笔试面试总结
  4. Bootstrap入门(二十一)组件15:警告框
  5. MySQL慢查询日志总结
  6. pyc文件反编译为py文件
  7. [Swift]LeetCode468. 验证IP地址 | Validate IP Address
  8. 试用GitHub Copilot一周后,我给你的建议是:不要使用它
  9. 栈的顺序存储及实现(一)
  10. Oracle安装-------实例化EM 配置文件时出错问题 ( 转 )
  11. Flink : Could not resolve substitution to a value: ${akka.stream.materializer}
  12. js-事件处理(重点)
  13. MOSS2007匿名调查列表使用分页符导致的错误分析
  14. 永中office linux卸载,永中集成Office在Ubuntu下的安装和卸载方法
  15. (拯救者Y7000)重装win10后,耳机插入电脑声音还是外放
  16. 阿里巴巴字体库使用方法
  17. UOJ449. 【集训队作业2018】喂鸽子 [概率期望,min-max容斥,生成函数]
  18. 利用QRmaker制作二维码
  19. 就dsaf就打开了撒酒疯
  20. Linux ARM平台开发系列讲解(摄像头V4L2子系统) 2.12.5 V4L2 control的原理和实现

热门文章

  1. ubuntu下查看USB摄像头参数以及摄像头测试
  2. 四叶草启动引导配置工具 !Clover Configurator中文版下载!
  3. 《商务与经济统计》要点回顾笔记
  4. Git利用命令行提交代码步骤
  5. 麒麟服务器操作系统V4,银河麒麟服务器操作系统V4
  6. 麒麟操作系统激活相关问题
  7. 移动互联智慧杭州、技术精英引领中国
  8. 基于边缘AI计算的人员入侵检测CNN算法在实际场景中的应用
  9. 海康威视球形摄像头激活,web二次开发
  10. 一款Mac平台上自带广告拦截功能插件的浏览器软件