C++数组 字符串

是什么:
相同类型元素的集合
写法:
int example[3]//数组在声明大小时必须为常数
数组名 example是个指针类型 如int*ptr=example;
数组索引的工作原理:

example[3]//从首地址位置偏移数组类型大小(int 是 4字节)乘索引值(4*3)个字节 
//从当前字节位置往后读四个字节;

可能出现的错误:
example[-1]//访问了不属于数组内的内存空间,可能会修改到别的变量的值
比如 int a;a的地址是1 example[-1]访问的地址也是 1 如果更改会把a的值也改掉 。
解决方法:设置安全检查确保写的东西不会超出边界
数组的创建方法:
int main()
{
int example[5]//在栈上穿件的,出当前作用域时会自动销毁
int* another=new int[5];//在堆上建立的除非手动销毁 不然会一直到程序结束;
}

std::array
要引用
写法:
std::array<类型,数量>数组名
例如std::array<int,5>another;
对比原始数组 有.size()方法
会有性能开销,它会做所有的边界检查 也保持了一个整数size(数组大小);
计算数组大小的方法:

int size=sizeof(example)/sizeof(int);//计算出整个数组内存多大 在除单个元素内存多大 
//得出数组的元素个数;该方法不怎么可用最好是自己维护数组大小

字符串

是什么:
本质是一个接一个的字符的一组字符,指字母符号;
什么时候用:
想要表示文本或一组文本
书写习惯:
用的时候加上const
怎样工作:
字符串实际上是字符数组类型是const char*
注意字符串是不可变的
写法举例:
const char*name="wzs";//可用strlen()计算长度
实际上字符串的全部内容是 wzs\0
\0是空终止符表示0 告诉编译器碰到空终止符 表示字符串已经结束了
写法2:
引用 < string >
std::string
std::string name="wzs ";
写法3:
char a[]="wzs hello!";

string 类中有个构造函数接受char或const char参数
" "是字符串字面量

计算字符串长度大小

strlen()接受char或const char参数
计算的长度不包含空终止符

追加字符串

法1:
std::string name="wzs";原理是将const char类的“wzs”解引用内容复制到string类型的name变量中去
name+="hello";//是将一个指针加到了name(是个字符串)加到一个字符串
+=在string类中被重载了
法2:
std::string name=std::string("wzs")+"hello";//std::string("wzs")调用构造函数 //相当于创建了一个string实例
用string类对比其他字符串方法
用string类可以调用.find()方法
功能:找到字符串中的文本 并返回要查找 文本的首地址;
std::string::npos;//代表一个不存在的位置
法3:
std::string name="wzs"s+"hello!";//这里的s是个函数 作用是返回标准字符串对象
法4:
const char
example=R"wzs\n"
"hello! "

字符串字面量

是什么:
""双引号之间的一串字符
注意:
是存在内存的只读部分的 什么情况下都不能修改;

字符类型

const wchar_t
是什么:
宽字符,两个字节的字符,但具体由编译器决定
实例:
const wchar_tname=L"wzs";//L表示后面的字符串字面量由宽字符组成一个字符占一个字节;
const char16_t
是什么:
两个字节 也就是16比特,区别于wchar_t 是确定的2字节不由编译器自己决定
写法:
const char16_t
name=u"wzs";

posted @ 2024-07-13 12:07  Wzline  阅读(2)  评论(0编辑  收藏  举报