(1)字符数组:每一个元素都是字符
(2)C语言中没有字符串类型,所谓字符串就是一个个字符的组合 ====> 可以将字符串存到字符数组里面 ====> " "括起来的内容是字符串,每一个字符串都以’\0’结尾
(3)字符数组和字符串是两回事情
(4)字符串是一个常量,是不能变的 ===> 字符数组是一段空间,可以存字符
1、字符数组初始化,可以按照普通数组的初始化方式初始化
char str1[10] = {'h', 'e', 'l', 'l', 'o'};
2、允许用字符串直接给字符数组初始化
char str2[10] = "hello"; // char str[10] = {'h', 'e', 'l', 'l', 'o', '\0'};
char str3[10] = {"hello"};
注意:可以直接打印字符数组,字符数组被当做字符串处理
printf ("%s\n", str3);
注意:可以直接对字符数组进行输入
scanf ("%s", str3);
printf ("%s\n", str3);
int main()
{
char str1[] = "hello\0world";
printf ("长度: %lu\n", sizeof(str1)/sizeof(char));
printf ("%s\n", str1);
return 0;
}
注意:字符串本身代表该字符串的首个元素的地址
int main()
{
char str1[] = "hello\0world";
printf ("长度: %lu\n", sizeof(str1)/sizeof(char));
printf ("%s\n", str1);
char *p1 = "hello\0world";
char *p2 = str1;
printf ("字符串 : %p\n", p1);
printf ("字符数组 : %p\n", p2);
p2[1] = 'w'; // 允许,修改的是数组第2个元素
printf ("%s\n", p2);
// p1[2] = 'w'; // 不允许,修改的是字符串,字符串是常量,不能改
scanf ("%s", p2);
printf ("%s\n", p2);
char *p3; // 没有初始化的指针叫野指针,不能操作
// scanf ("%s", p3); // p3没有指向一个有效的空间
char str2[5] = {'h', 'e', 'l', 'l', 'o'};
printf ("%s\n", str2);
return 0;
}