字符数组初窥

什么是字符数组

字符数组使用字符的形式保存数组(实质上就是将单个字符利用数组的方式保存起来)

数组:采用int,float,double类型初始化

字符数组:采用char类型初始化

int i[]={1,2,3};

char ch[]={‘h‘,‘e‘,‘l‘,‘l‘,‘o‘};

字符数组与字符串的区别

我们通常意义上说的字符串是类似于“hello”这样用双引号引起来的字符集。二者的区别主要集中在定义和赋值上。

在C中对字符串并没有明确的划分,一般使用字符数组来初始化字符串并赋值。即

char ch[]={‘h‘,‘e‘,‘l‘,‘l‘,‘o‘}

如果我们要定义一个多维字符数组,那么我们需要这样做

char ch[3][10]={"hello","my","love"}

显然这样的方式在多维字符串的定义赋值中过于繁琐,为此C++中提出了一个替代方案,即使用string类型专指字符串,将二者区分开来。string不同于char,char与int,float,double等是基础类型,在程序中具有固定的长度,而string属于模板类型(Class类),在C#中称其为引用类型,它本身并不像char一般具有固定长度,它的长度取决于引用的内存中字符串的长度。

上述实例我们重新用string类型赋值如下

string str="hello my love"

显然与上例相比程序的可读性被增强。关于string还有一些方法和属性便于更快捷的使用字符串,将在以后的文章中专门讲解,这里不再赘述。

字符数组赋值

字符数组的赋值要求直接在字符数组定义后面执行,有如下几种方式

1 char ch1[]="hello";
2 char ch2[6]="hello";
3 char ch3[5]={‘h‘,‘e‘,‘l‘,‘l‘,‘o‘};
4 char ch4[]={‘h‘,‘e‘,‘l‘,‘l‘,‘o‘};
5 char *ch5="hello";   //此为字符指针赋值

特别提醒:直接用字符串赋值数组长度应为字符串长度+1(字符串后面以\0结尾)

注意:字符数组不能直接赋值!!!诸如

          char ch[5];ch[5]="hello"是不合法的

 

字符指针和字符数组的区别

对比上述赋值方式,前四个为字符数组赋值,相当于开辟若干内存空间,每一个字符依次指向每一个内存空间。第五个是字符指针赋值,相当于开辟若干空间存入字符串,然后让字符指针指向首位内存地址。由于字符指针指向的是内存地址,而字符数组直接指向内存中的内容,因此前者支持直接赋值,而后者不行

char *ch;
ch="hello";      //这是合法的

char ch[5];
ch="hello";     //这是不合法的

关于‘\0’

以前上课的时候老师曾经讲过,字符串(字符数组)以‘\0‘结尾,在此特别加以说明:

‘\0‘由程序自动填充,其作用有两个:(1)用于标记字符串结束;(2)用于填充位,详细如下

1 char ch1[]="hello";        //字符串内自动填充‘\0‘
2 char ch2[6]="hello";     //相当于{‘h‘,‘e‘,‘l‘,‘l‘,‘o‘,‘\0‘}
3 char ch3[5]={‘h‘,‘e‘,‘l‘,‘l‘,‘o‘};      //五位字符全部被占用,没有‘\0‘
4 char ch4[7]={‘h‘,‘e‘,‘l‘,‘l‘,‘o‘};      //存在两位空位,填充两个‘\0‘
5 char ch5[]={‘h‘,‘e‘,‘l‘,‘l‘,‘o‘};        //动态分配内存,没有‘\0‘

由于程序运行时如果字符数组内不存在‘\0‘终止符,有可能会造成内存溢出,使程序中断,因此赋值时需要注意

时间: 2024-10-12 20:42:35

字符数组初窥的相关文章

jQuery源码学习(2):选择器初窥

选择器初窥 代码架构: jQuery选择器可以依照传入数据的类型分为五大类: 传入字符串:$("div"), $("#id"), $(".div1"),$(".div p.title") 传入html代码:$("<div></div>"), $("<div>1</div><div>2</div>") 传入对象:$(d

C++拾遗(二)——初窥标准库类型

本篇博文的开始,先介绍一道书上看到的智力题:有20瓶药丸,其中19瓶装有1克/粒的药丸,余下一瓶装有1.1克/粒的药丸.有一台称重精准的天平,只是用一次天平的情况下如何找出比较重的那瓶药丸? 好了,直接公布答案.从药瓶#1取出一粒药丸,从药瓶#2取出两粒,从药瓶#3取出三粒,依此类推.如果每粒药丸均重1克,则称得总重量为210克(1 + 2 + … + 20 = 20 * 21 / 2 = 210),“多出来的”重量必定来自每粒多0.1克的药丸.药瓶的编号可由算式(weight - 210 gr

作业九 二维数组和字符数组的应用

知识点: (1)二维数组的定义形式为: 类型名 数组名 [行长度] [列长度]; (2)引用二维数组的元素要制定两个下标,即行下标和列下标,形式为: 数组名 [行下标] [列下标] (3)行下标的合理取值范围是[0,行长度-1],列下标合理的取值范围是[0,列长度-1]. (4)分行赋初始值,一般形式为: 类型名 数组名 [行长度] [列长度]={{初值表0},-,{初值表k},-}; 然后可把初值表k中的数据一次赋值给第k行的元素. (5) 顺序赋初始值,一般形式为: 类型名 数组名 [行长度

初窥C++11:自动类型推导与类型获取

auto 话说C语言还处于K&R时代,也有auto a = 1;的写法.中文译过来叫自动变量,跟c++11的不同,C语言的auto a = 1;相当与 auto int a = 1;语句. 而C++11的auto是有着严格的类型推导出来的.以前是这么写 int a = 1; 现在,编译器知道a是int型了.所以可以这么写 auto a = 1; 对于类型比较长的,如vector<string>::iterator这类的,能少敲些字符了. 如果仅仅就这点作用,那么对编程实在没什么太大的益

Hadoop学习笔记(9) ——源码初窥

Hadoop学习笔记(9) ——源码初窥 之前我们把Hadoop算是入了门,下载的源码,写了HelloWorld,简要分析了其编程要点,然后也编了个较复杂的示例.接下来其实就有两条路可走了,一条是继续深入研究其编程及部署等,让其功能使用的淋漓尽致.二是停下来,先看看其源码,研究下如何实现的.在这里我就选择第二条路. 研究源码,那我们就来先看一下整个目录里有点啥: 这个是刚下完代码后,目录列表中的内容. 目录/文件 说明 bin 下面存放着可执行的sh命名,所有操作都在这里 conf 配置文件所在

Java发送邮件初窥

一.背景 最近朋友的公司有用到这个功能,之前对这一块也不是很熟悉,就和他一起解决出现的异常的同时,也初窥一下使用Apache Common Email组件进行邮件发送. 二.Java发送邮件的注意事项 1.不同的邮箱有不同的支持协议,比如有些只支持SSL协议,有些只支持TLS协议,还有些同时支持SSL和TLS协议. 2.支持不同协议的邮箱,在使用Java发送邮件时要使用不同的方式发送,下面我会介绍基于SSL和TLS的两种实现方式. 附:常用邮箱的服务器(Smtp/POP3)地址和端口总结 三.代

[基础] AHK函数对象初窥 ① _实例2_实际可用版

;# 母文章 https://zhuanlan.zhihu.com/p/48977298;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; 脚本名称:函数对象初窥①_实例2 [直接可用版本] ; 脚本版本号 v0.2 ; AHK版本: 1.1.30 ; 语言:中文 ; 作者:心如止水<QQ:2531574300> <Autohotkey高手群(34

C++中字符数组和字符串string

字符数组 C++中字符数组用char str[]可以用来表示一个字符串. (1)   数组的大小和字符串的长度. 数组的大小一定要大于字符串的长度,因为系统会自动补上一个'\0'作为字符串的结束标志.当然对于未初始化的也补'\0'. #include <iostream> #include <string> using namespace std; int main() { char str[11] = "I am happy"; // 系统会自动补上'\0'空

Scrapy 1.4 文档 01 初窥 Scrapy

初窥 Scrapy Scrapy 是用于抓取网站并提取结构化数据的应用程序框架,其应用非常广泛,如数据挖掘,信息处理或历史存档. 尽管 Scrapy 最初设计用于网络数据采集(web scraping),但它也可用于使用 API(如 Amazon Associates Web Services)提取数据或用作通用的网络爬虫. 爬虫(spider)示例 为了向您展示 Scrapy 带给您的是什么,我们将使用最简单的方式运行一个爬虫,向您展示一个 Scrape Spider 的例子. 这是一个爬虫的