当前位置: 首页 > news >正文

对字符、字符串的研究

每日一背

C的字符串很特殊

//返回字符
char test2()
{return 'p';
}
//返回整数
int test2()
{return 90;
}

其实字符串本就是很特殊的存在。字符型、整数算一类,但是字符串型区别前两个类。整数、字符都返回的是一个值,所以可以直接在主函数里面cout不会报错,也可以赋值给其他。但是字符串就不一样了。以下就错了,字符串返回的是地址,整型返回的是值。

char test2()
{return "hello";
}

局部变量离开函数就会被销毁,但值还是可以继续赋值,而地址就已经被彻底销毁了,无法返回,打印的化也是乱码。以下代码没有错,但是返回值没有意义了,因为变量赋值前已经被销毁了。所有cout打印是乱码。

char* test2()
{char str[10] = "hello";return str;
}

如何返回字符串?

解决办法有4种。

1-new块内存

//在函数内部new一块内存给数组
char* test2()
{char* str = new char[20] {"helloworld"};return str;
}//main部分,在主函数里面定义指针指向这块地址,最后一定要销毁这块地址
int main()
{char* str = test2();cout << str;delete[] str;
}

这个时候的str就是未初始化的内存。

2.添加static

在函数里面定义static变量后,这个值就一直存在了,不会被销毁。相当于在函数里面创建了一个。和程序同生命的变量,不过只能在函数里面使用

char* test2()
{static char str[] = "helloworld";return str;
}

3.搞全局变量

无法返回的根本原因就是局部变量地址被销毁了,全局变量在函数里面运行完后不会吧销毁。至少要在参数列表里面使用形参指针。

//定义全局变量
char str[] = { "you are my sun"};
//定义形参指针
char* test2(char* str)
{return str;
}
//主函数
cout << test2(str);直接打印

4.单独为字符串开个变量string

以上3个都是字符串借用字符的数据类型办事,数组就是借用字符数据类型都很麻烦,不如自己搞个数据类型。C++专属。不需要数组。这回string ,char ,int倒是一样的了

string test2()
{string str= "hello";return str;
}cout << test2();

转义字符

它在ASCII中的值为0(数值0,非字符‘0’)

对于 ASCII 编码,0~31(十进制)范围内的字符为控制字符,它们都是看不见的,即不能在显示器上显示,甚至无法从键盘输入;部分控制字符在编辑语言中还被定义为特殊用途。因此只能用转义字符的形式来表示它们。不过,直接使用 ASCII 码记忆不方便,也不容易理解,所以针对常用的控制字符,各类编程语言对转义字符又定义了简写方式。

要使用转义字符的,就只有ASCII的前0-31号

要么输入7然后转换成ASCII码,要么用转义字符。

解引用判断

*str == '\0'

*str == 0

*str == ‘0’

*str == 48

 以上两种是一个概念,对指针解引用是当前字符,等式右边可以有两种形式,一是字符,二是字符对应的ASCII码

字符串打印

char str1[]={"hello"}

cout<<str1——打印全部

cout<<*str1—— 打印第一个字符,因为str1默认第一个字符地址,解引用

cout<<str1[2]——打印下标为2的对应字符

cout<<* & str1[2]——打印下标为2的对应字符,不过这有点吃多了。


http://www.mrgr.cn/news/17341.html

相关文章:

  • python3.10安装
  • Python类详解
  • python办公自动化:使用`Python-PPTX`添加图表
  • RoadLib---这两年值得一看的建图定位项目
  • MC药水酿造
  • Mac系统内存怎么清理:一篇让你轻松摆脱卡顿的指南
  • 【Unity实战】Visual Studio Debug失败
  • 【Redis】Redis 客户端开发与 Java 集成:RESP协议解析与实战操作
  • 毕业论文免费查重网站
  • MicroNet关键代码解读(Micro-block与Dynamic Shift-Max的实现代码)
  • postgis
  • Vue 全局数据:提升开发效率的利器
  • Go语言的前世今生与未来展望
  • ⾳频重采样及基本概念
  • 数据结构:(LeetCode101)对称二叉树
  • 驱动开发系列17 - PCI总线
  • World of Warcraft [CLASSIC][80][Grandel]Sapphire Hive Drone
  • C语言中的预处理指令的其中之一——#line
  • 《JavaEE进阶》----7.<SpringMVC实践项目:【登录页面的验证】>
  • 产品入门篇笔记