符合类型相关知识点

简介: 符合类型相关知识点

一.常规数组


数组定义:typename arrayName[arraySize](arraySize可以为int值,const值,常量表达式等可以最后确定一个准确的值)(new可以允许是变量)


1.程序不会对数组越界进行提示,所以一定要保证数组下标的有效性


2.sizeof(数组名)得到的是整个数组的长度,sizeof(数组名[i])得到的是单个成员的长度


3.c++11对数组初始化禁止缩窄操作(int->char属于缩窄操作,即数字范围变小的操作)


二.结构数组


结构数组定义:结构中元素为数组,或者,数组中的元素为结构


三.动态数组


用于new运算符来创建动态数组:type_name * pointer_name = new type_name[num_elements];


不能用于sizeof来确定动态分配的数组包含的字节数


动态创建的数组用相应的类型指针去接受它,但是由于指针是变量所以可以修改它的值,修改它的值也就是修改它的指向,但是数组的数组名不能修改。


四.字符串(c-风格字符串 string 类型字符串)


1.c-风格字符串(char数组存储字符,\0表示结尾)


(1)必须包含\0才算是一个字符


(2)字符数组初始化 char bird[11] = “mr ,cc”; 此时引号隐式的包括的结尾的空字符。


(3)在确定存储最短数组时,必须把结尾的空字符计算在里面


(4)字符串拼接  任何两个由空白分隔的字符串常量都将自动拼接成一个。


(5)在数组中使用字符串  存储的方法有两种1.将数组初始化为字符串常量2.将键盘或者文件输入读入到数组中。(strlen()可以计算数组的长度,在cstring头文件中)


(6)sizeof会将数组中的\0计算在内,但是strlen只会计算可见的字符。


(7)cin 有两个缺点:1.当输入有空格,制表符和换行符的时候,cin会自动断开,并且后面部分会存入下一个cin中,造成信息的断裂。2.cin输入时当字符数大于数组最大容量时不会报错。


(8)cin.getline和cin.get解决了cin的缺点:getline(还有一些其他的重载版本)读取一行直到遇到换行符并丢弃换行符。get读取一行直到遇到换行符但是不丢弃换行符。


(9)cin.get(有参),cin.get(无参)有参的形式是将一行传递给目标内存,无参的是跳过读取下一个字符(可用来跳过换行符)。


(10)一般来说,使用get(有参)来读取一行,因为get(有参)输入更加仔细,让人知道是读取到了换行符停止了


(11)当get,getline读取到空行的时候会设置失效位failbit可以用cin.clear恢复输入,当输入字符太长的时候,getline会设置失效位,并关闭后面的输入。


(12)混合输入字符串和数字时,在输入数字后按下换行符会导致字符串无法输入,可以用cin.get()来读取下一位字符。


2.string类字符串(将字符串作为一种数据类型)


(1)string类字符串和字符数组相同的部分为:1.可以使用c-风格的字符串初始化string对象.2.可以使用cin来将键盘输入到string对象。3.可以使用cout来显示string对象。4.可以使用数组表示法开访问string对象中的字符。


(2)一个数组不能赋值另外一个数组,但是string可以,string还可以拼接和附加。


(3)可以使用strcpy()将字符串赋值给字符数组,strcat()将字符串加在字符数组末尾。


(4)string对象.size()输出对象的字符数。


(5)cin,cout 来对string对象进行输入和输出的时候,每次读取的是一行而不是一个单词。


五.指针,数组,指针算术


1.整数变量加1,其值加1,但是将指针变量加一增加的量等于它指向类型的字节数,


2.数组名解释为地址


3.在多数情况下,可以相同的方式使用指针名和数组名。区别之一是指针的值是可以修改的,数组名是常量。区别之二是对数组应用sizeof得到的是数组的长度,但是对指针应用sizeof得到的是单个地址的长度。


4.对数组取地址的时候,传递的是整个数组的地址而不是第一个元素的地址。并且接受的为一个另外一个数组。eg:short(*pos)[20] = &tell;此时(*pos) 与 tell 用法相同。注意short(*pos)[20] 不是一个指针数组。


六.指针和数组小结:


1.声明指针 typeName * pointerName


2.给指针赋值 (1)变量名用&取地址符(2)new运算符返回新创建的内存的地址


3.*对指针进行解引用,但是不可对未赋值的指针进行解引用


4.数组名一般认为是数组中第一个元素的地址,但是在sizeof(数组名)此时返回的是整个数组的长度。


5.指针算术 允许指针+1,加了等于指向数据类型的字节数


6.数组的动态联编和静态联编  int  at[20]属于静态联编(在编译时分配空间),int * p = new int [20] 属于动态联编(在运行时分配空间)。


7.数组表示法和指针表示法 使用方括号数组表示法等同于指针解除引用 eg:tacos[0] = * tacos  ;


tacos[3] = *(tacos + 3);  


目录
相关文章
|
6月前
|
Java Spring
使用枚举定义常量更好点儿
使用枚举定义常量更好点儿
|
6月前
|
程序员
程序员必知!里式替换原则的实战应用与案例分析
里式替换原则(Liskov Substitution Principle, LSP)是面向对象设计的基本原则之一,由Barbara Liskov于1987年提出。这个原则的主要思想是:在软件中,如果一个类可以被另一个类所替换,并且不会影响程序的正确性,那么这两个类就遵循了里式替换原则。
程序员必知!里式替换原则的实战应用与案例分析
|
6月前
|
安全 编译器 C++
【C/C++ 类型转换规则】一文了解C/C++ 中的类型转换规则,帮助你更好的编程
【C/C++ 类型转换规则】一文了解C/C++ 中的类型转换规则,帮助你更好的编程
79 0
|
6月前
|
开发工具 git Python
编程领域中的 blame 操作的含义
编程领域中的 blame 操作的含义
|
6月前
|
机器学习/深度学习 算法 编译器
【C++ 泛型编程 中级篇】深度解析C++:类型模板参数与非类型模板参数
【C++ 泛型编程 中级篇】深度解析C++:类型模板参数与非类型模板参数
80 0
Carve-out 的含义和使用场景介绍
Carve-out 的含义和使用场景介绍
|
6月前
|
算法 BI C++
[第四章]枚举与模拟
[第四章]枚举与模拟
65 1
feof用法重点详解(易被误用判断文件结束!!!)
feof用法重点详解(易被误用判断文件结束!!!)
|
JavaScript 网络架构
ES6知识点补充——剩余参数、展开语法
JS查漏补缺系列是我在学习JS高级语法时做的笔记,通过实践费曼学习法进一步加深自己对其的理解,也希望别人能通过我的笔记能学习到相关的知识点。这一次我们来了解剩余参数、展开语法
189 0
|
编译器 Scala 开发者
类型匹配的注意事项和细节 | 学习笔记
快速学习类型匹配的注意事项和细节