c++ 复合类型 读书笔记(1)

数组

数组的下标:编译器不会检查使用的下标是否有效,但是可能会影响程序的运行,破坏数据或代码,也有可能导致程序异常终止。所以必须要确保程序只使用有效的下标值。

数组的初始化

  1. 第一种:
int array[3];
array[0]=7;
array[1]=9;
array[2]=8;
  1. 第二种(初始化列表)
int array[3]={7,9,8};

初始化规则

部分初始化:编译器会将其他元素设置为0

在C++11中:初始化数组,可省略等号;
		当使用初始化列表时,可不在大括号内包含任何东西,这将所有元素都设置为0;
		列表初始化禁止缩窄转换,即数组的类型和数组元素的类型要一致

字符串

在c语言中,字符串以空字符结尾(‘\0 ’)。
字符串是存储在内存的连续字节中的一系列字符。

c语言中有:

/*字符数组*/
char cat[8]={'f','a','t','c','a','e','t','\0'};

/*字符串常量*/
char cat[11]="bubbles";

字符串常量隐式的包括了结尾的空字符
字符串常量与字符常量不能进行互换:
”S”和‘S’

"S" 表示两个字符('S''\0')组成的字符串;
'S' 表示一个字符S。换成ASCII为83

拼接字符串常量

任何两个由空白(空格,制表符,换行符)分隔的字符串常量都将自动拼接成一个;在拼接时不会在被连接的字符串之间添加空格。第二个字符串的第一个字符紧跟在第一个字符串的最后一个字符(不考虑\0),第一个字符串中的\0字符被第二个字符的第一个字符取代。

在数组中使用字符串

要将字符串存储在数组中,有两种办法:

  1. 将数组初始化为字符串常量
  2. 将键盘或文件输入读到数组中

sizeof():返回的是整个数组的长度
strlen():返回的是存储在数组中的字符串的长度,而不是数组本身的长度;不计算空字符。

c++中,cin通过空白(空格,制表符,和换行符)来确定字符串的结束位置。【在输入的时候应注意!!!】

每次读取一行字符串输入

istream中的类如cin提供了面向行的类成员函数:
1.	getline()
	它通过回车键键入的换行符来确定输入结尾。但不保存换行符,在存储字符时,会用空字符来替换换行符;
	调用方法:cin.getline(para1,para2);
	para1:第一个参数是用来存储输入行的数组的名称
	para2:第二个参数是要读取的字符数。若参数为20,最多能读取19个字符;余下的自动存储在结尾处添加的空字符。
	
2.	get()
	get不会丢弃换行符,而是将其留在输入队列中。
	cin.get()可可读取下一个字符(即使是换行符)
	
	cin.get(name,20);
	cin.get(dma,20);
	在第一次调用后,换行符留在了输入队列中,第二次调用时的第一个字符就是换行符,因此get()认为已经达到队尾,而没有发现任何可读取的内容。所以正确的调用顺序应为:
	cin.get(name,20);
	cin.get();
	cin.get(dma,20);

	另外的一种get()的方式是:
	cin.get(name,20).get();  /*自己本身也不大理解*/

当get()读取空行后,会设置失效位,意味着接下来的输入将被阻断,需要用:
cin.clear() 来恢复输入。

待解决问题:输入字符串可能比分配的空间长,如果输入行包含的字符数要比指定的多,则以上两个函数都会将余下的字符留在输入队列中,而getline()会设置失效位,并关闭了后面的输入【学到后面后来解决】

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值