C 语⾔中字符串和字符数组的区别
C 语⾔中字符串和字符数组的区别
1、基本概念
字符串和字符数组很相似,但是有本质上的区别。
(1) C语⾔中,字符串是双引号括起来的单个或多个字符的集合,编译器⾃动在结尾加上’\0’字符。字符串常量存储在只读数据段,⽆法通过指针进⾏修改字符串中的某个字符。
(2)C语⾔中,不能定义字符串(没有string关键字,只要C++才有),但是在C语⾔中使⽤字符串,通常会⽤字符数组来模拟字符串,必须是’\0’结尾的字符数组,这个字符数组存储通常会分配在栈区,也可以被称为字符串,且该字符串中的字符是可以修改的。如果字符数组中没有’\0’结尾,那该字符数组就是普通的字符数组,不是字符串。
2、代码分析
运⾏结果:
#include  <stdio.h>
int  main ()
{
//字符数组s 和s0
char  s [] = "Hello World!";//可以成为字符串
char  s0[] = {'H', 'e', 'l', 'l', 'o'};//不可以成为字符串
printf ("%s\n", s );
//printf(“%s\n”, s0);  //编译报错
printf ("s[0] = %c\n", s [0]);
char  *p1 = s ;
*p1 = 'h';
printf ("Corrected:s[0] = %c\n", s [0]);
printf ("%s\n", s );
//字符串常量本质是⼀个数组,可以做常量指针,代表该字符串的地址
//字符串常量的本质是⼀个⽆名的字符数组
//字符串常量的字符不可改变(存储于只读数据段)
//字符串常量⾄少包含⼀个字符(即’\0’结束符)
char  ch1  = "Hello World!"[0];
char  ch2 = *"";  // 等价于ch2 = ‘\0’,它的ASCII 码值为0
printf ("ch1 = %s\n", ch1);
printf ("ch2 = %c\n", ch2);
/
/指针变量p2指向存储在只读数据段的字符串常量
char  *p2  = "Hello World!";
c语言如何创建字符串数组printf ("%s\n", p2);
printf ("*p2 = %c\n", *p2);
*p2 = 'h';
printf ("*p2 = %c\n", *p2);//运⾏时报错
return  0;
}
3、总结
(1)C语⾔中,可以⽤字符数组模拟字符串。
(2)C语⾔中,字符串是以’\0’作结尾字符。
(3)C语⾔中,字符串常量本质上是⼀个⽆名的字符数组

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。