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

对字符、字符串的研究

每日一背

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.kler.cn/a/286124.html

相关文章:

  • PHP 语法
  • Redis从入门再到入门(中)
  • Java算法之插入排序(Insertion Sort)
  • 16:螺丝孔和MARK点布局
  • 好用的运动耳机品牌推荐?几款开放式蓝牙耳机推荐
  • 机器视觉-4 检测原理之OpenCV Blob特征检测
  • RAG中pdf解析的方法全览
  • [范文赏析 代码复盘]2023高教社杯数学建模国赛C题详细代码 文章 数据教学 保姆级手把手包含文档格式 2024数模国赛教学:蔬菜类商品的自动定价和补货决策
  • 信息安全--(五)物理与环境安全技术(一)物理安全概念
  • 逆向工程核心原理 Chapter22 | 恶意键盘记录器
  • iPhone 16 系列和多款新品将亮相,苹果发布会定档 9 月 10 日|TodayAI
  • Python在神经网络中优化激活函数选择使用详解
  • [Day 67] 區塊鏈與人工智能的聯動應用:理論、技術與實踐
  • Qt中的各种“q+基本数据类型“
  • P1880 [NOI1995] 石子合并【模板】区间DP
  • 安全入门day.03
  • 排序算法之归并排序详细解读(附带Java代码解读)
  • 功能强大的开源数据中台系统 DataCap 2024.03.9 发布
  • 反向迭代器:reverse_iterator的实现
  • STM32(F103ZET6)第二十四课:IAP离线固件升级