栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

c语言学习笔记3

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

c语言学习笔记3

一、字符串

字符串:由双引号引起来的一串字符

例如''abcd"

注:字符串的结束标志是一个的转义字符。在计算字符串长度的时候是结束标志,不算作字符串内容。它占用内存空间,但是不计入串长。

证明一:先调试再进行监视操作

 加上隐藏的内容后对应字符串为"hello"

证明二:打印字符串

%s-表示输出字符串形式

%c-则输出字符数据(char类型)

int main()
{
	char arr1[] = "abcdefg";
	char arr2[] = { 'a','b','c','d','e','f','g'};
        printf("%sn", arr1);
	printf("%sn", arr2);
	return 0;
}

用字符串初始化arr1数组,用字符初始化arr2数组,再运行

现象

arr2因无/0结束标志打印完abcdefg之后开始部分乱码,同时向上方数组开始继续检索打印直到遇到arr1中的打印停止

结论

用字符串初始化数组时,系统会在字符数组的末尾自动加上一个字符"",因此数组的内存大小比字符串中实际字符的内存大,如:sizeof(str1)=strlen(str1) +1

用字符初始化数组时,则一定要把""作为一个元素放在初始值表中

在内存中,就是根据""来确认字符串,如果找不到就会沿着字符一直找下去

解决方案 1.手动添加字符''
char arr2[] = { 'a','b','c','d','e','f','g',''};
2.给数组分配指定内存
char arr2[8] = { 'a','b','c','d','e','f','g'};

这里个人认为分配内存时默认会自动加上''

由于''也占1字节内存故分配8字节以上的内存

证明三:求字符串的长度

这里利用strlen函数对字符数组进行计算,同时使用此函数需要引用string.h头文件

#include
#include
int main()
{
	char arr1[] = "abcdefg";
	char arr2[] = { 'a','b','c','d','e','f','g','' };
	char arr3[] = { 'a','b','c','d','e','f','g' };
	printf("%dn%dn%dn", strlen(arr1), strlen(arr2),strlen(arr3));
	return 0;
}

 由于数组arr3无结束符使arr3计算出现奇怪的数字

''占用内存空间,但是不计入串长

附上大佬的深入研究:visual studio中字符数组内存分配粒度大小与字符数组实际内存占用大小的确定过程_sdfgh2046的博客-CSDN博客

 二、转义字符
?在书写连续多个问号时使用,防止他们被解析成三字母词
'用于表示字符常量
"用于表示一个字符串内部的双引号
\用于表示一个反斜杠,防止它被解释为一个转义序列符
a警告字符,蜂鸣
b退格符
f禁止符
n换行
r回车
t水平制表符
v垂直制表符
dddddd表示1~3个八进制的数字              如:130就是x
xdddd表示2个十六进制的数字                如:x30就是0

ascii码表:

 应用情况:

 小彩蛋:电脑可以按住alt+ascii码表上对应的十进制数字(小键盘输入)可以出现对应字符

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1019387.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号