1.字符串的实现
在C语言中,表示一个字符串有以下两种形式
- 用字符数组存放一个字符串
- 用字符指针指向一个字符串
案例:
//字符串的两种实现方式
#include <stdio.h>
//使用字符数组实习
void fun()
{
//定义伪字符串
char str[] = "I Love You!";
printf("%s\n",str);
}
//使用字符指针实现
void fun1()
{
char *str = "I Love You!";
printf("%s\n",str);
}
int main()
{
fun();
fun1();
return 0;
}
注意:字符数组和字符指针变量都能实现字符串的存储等与运算
2.字符数组和字符指针的联系
- 字符数组由元素组成,每个元素中存放一个字符,而字符指针变量中存放的是地址,也能作为函数参数。
- 只能对字符数组中的各个元素赋值,而不能用赋值语句对整个字符数组赋值。
- 字符数组名虽然代表地址,但数组名的值不能改变。因为数组名是常量。
- 对于字符串中字符的存取,可以用下标法,也可以用指针法。
案例:
//字符数组和字符指针的联系
#include <stdio.h>
int main()
{
//使用两种方式定义字符串
char str1[] = "你好,反抗的";
char *str2 = "你好,其外饿";
//测试赋值
//str1 = "nihao";
//不能对字符数组整体赋值,如果要赋值,使用string.h中strcpy()
str2 = "qwe";
//打印输出
printf("%s\n%s\n",str1,str2);
char a[] = "I love you";
char *b = "I love you";
//使用下标法和指针法访问字符串
printf("%c\n%c\n",a[4],*(b+4));//v,v 空格也占位的
return 0;
}
3.字符串指针作为形式参数
-
实参与形参都可以是字符数组
- 实参用字符数组,形参用字符指针(在函数内部不能对字符串中的字符修改)
test5(char *arr,int len)
{
arr[2] = 'A';//错误,字符串常量一旦创建,就不能改变
}
main()
{
char arr[] = "abc";//字符串常量,常量不能被修改
char *p = arr;//&arr[0]
test(p,3);
}
- 实参是指针类型,形参是字符数组
注意:
-
字符数组在创建的时候,会在内存中开辟内存空间,内存空间可以存放字符数据;字符指针在创建的时候,需要依赖于字符数组,字符指针在内存中开辟的内存空间中,存放的是数组元素的内存地址。字符指针的创建依赖于字符数组,字符数组可以独立存在,而字符指针不能独立存在。
-
字符数组可以初始化,但是不能赋值;字符指针可以初始化,也可以赋值。