目录
- 什么是字符串
- C语言中的字符串
- 字符数组与字符串的比较
什么是字符串
之前我们已经学过单个字符的文字型数据(char)。同时了解过字符串。
在C语言中,字符串用双引号包围。
#include <stdio.h>
int main(int argc, char* argv[])
{
printf("Hello");
return 0;
}
字符串不是C语言中的基本数据类型。在我们之后的学习中可以看到,它是根据约定存储多个char数据的一种方式。
C语言中的字符串
为了方便研究,我们将以上代码进行修改:
#include <stdio.h>
int main(int argc, char* argv[])
{
char* szHello = "Hello";
printf("%s", szHello);
return 0;
}
实际上,当我们定义
"Hello"
时,编译器帮助我们做了以下几件事情:
- 根据"Hello"的字符串长度,分配一段char类型的空间
- 将"Hello"中的字符一个一个复制到以上的空间中
- 在以上空间的末尾添加数字0作为结束标志
- 将字符串的首地址返回(char*类型)
#include <stdio.h>
int main(int argc, char* argv[])
{
char* szHello = "Hello";
printf("Hello字符串的空间大小: %d\r\n", sizeof("Hello"));
printf("Hello字符串的首地址: %08X\r\n", szHello);
return 0;
}
我们甚至可以结合数组的知识,将字符串空间对应的char数据,一个个取出来,并输出:
#include <stdio.h>
int main(int argc, char* argv[])
{
char* szHello = "Hello";
int i = 0;
for (; i < sizeof("Hello"); i++)
{
printf("%d: ASCII数值:%d, 对应字符:%c\r\n",
i, szHello[i], szHello[i]);
}
return 0;
}
注意:C语言中规定以数字0作为字符串的结尾。
字符数组与字符串的比较
因为字符串中的每一个元素都是char类型,所以与字符数组有相似的地方。比如:
#include <stdio.h>
int main(int argc, char* argv[])
{
char* szHello = "Hello";
char chAry[] = "Hello";
printf("%s, %s\r\n", szHello, chAry);
return 0;
}
但实际上是有区别的:
#include <stdio.h>
int main(int argc, char* argv[])
{
char* szHello = "Hello";
char chAry[] = "Hello";
chAry[0] = 'j';
printf("%s\r\n", chAry);
szHello[0] = 'j';
printf("%s\r\n", chAry);
return 0;
}
简而言之:
- 字符数组可读可写
- 字符串可读不可写
原文地址:https://www.cnblogs.com/shellmad/p/11695543.html
时间: 2024-11-05 13:03:56