C语言字符串、字符数组、字符指针

2022年7月27日10:15:20

目录

一、字符数组

(1)字符数组的定义

(2)字符数组的初始化

二、字符串

(1)字符串的概念

(2)用字符串初始化字符字符数组

(3)获取字符串的长度

三、字符串与指针

四、字符数组与字符指针


一、字符数组

字符数组是存放字符数据的数组,每个元素都是单个字符。

(1)字符数组的定义

char 数组名[数组长度];//一维字符数组

char 数组名[常量表达式1][常量表达式2];//二维字符数组

(2)字符数组的初始化

在数组定义的同时对数组中的元素进行赋值,这个过程称为数组的初始化。

例如:char ch[5] ={'h','e','l','l','o'};//定义了一个包含5个元素的一维字符数组,数组名ch

字符数组初始化注意事项:

①元素个数不能大于字符数组长度

②如果初始项值少于数组长度,则空余元素均会被赋值为'\0' .

例如:char str[5]={'a','b','c'};

str数组在内存中的表现为:

③如果没有指定数组大小,编译器会根据初始项的个数为数组分配长度

char str[] ={'a','b','c'};//等价于char str[3]={'a','b','c'};


二、字符串

(1)字符串的概念

字符串是由字母、数字、下划线和空格等各种字符组成的一串字符,是一个常量。由一对双引号括起来。

字符串的末尾都默认有一个'\0'的结束符。

"abcd"

"     "//这个也是字符串,里面的字符是空格

通常用字符数组的形式来存储和处理字符串,这种字符数组必须以空字符'\0'结尾

当把一个字符串存入一个字符数组时,应把结束符'\0'存入数组。所以字符数组的长度是字符串实际字符+1

例如:字符串“abcd”在数组中的存储表现为:

(2)用字符串初始化字符字符数组

为了方便对字符数组进行初始化,可以直接使用一个字符串常量来为字符数组进行赋值。

char str[6]={"hello"};

char str[]=={"hello"};

等价于

char str[6]={'h','e','l','l','o','\0'};

(3)获取字符串的长度

方法一:sizeof()运算符

方法二:strlen()函数

求字符串“abcd”的长度

int str[]={"abcd"}

int len1=sizeof(str)/sizeof(str[0);

int len2=strlen(str);

解析:结果len1=5;len2=4;

sizeof 和strlen总结

sizeof是运算符;strlen是库函数,包含在string.h头文件中

②sizeof功能是获得所建立对象的字节大小;strlen函数是获得字符串所占内存的有效字节数

③sizeof运算符的参数可以是数组、指针、对象、函数等;strlen函数的参数必须是以'\0'结尾的字符串的指针

④sizeof运算符计算大小在编译时就完成,因此不能用来计算动态分配内存大小;strlen函数结果要在运行时才能计算出来。


三、字符串与指针

字符型指针用char*定义,它不仅可以指向一个字符型常量,还可以指向一个字符串。

char str[]="hello";

char* ch=str;

字符指针ch和字符串str的关系如下:


四、字符数组与字符指针

字符串用字符数组来存储,也可以用数组地址取址赋值给字符型指针。

字符数组和字符指针的区别和联系总结:

(1)存储方式

字符数组在用字符串初始化时,这个字符串就存放在字符数组开辟的内存空间中;

字符指针变量在用字符串常量初始化时,指针变量中存储的是字符串的首地址,但字符串存储在常量区。

实例分析:

char str[6]="hello";

char* p="hello";

上面两行代码定义的变量在内存区的存储方式如下:

存储在栈区、堆区、静态区的数据是可更改的,存储在常量区的数据只能在定义时赋值,且一旦赋值就不能再改变。

(2)初始化和赋值方式

①初始化方式

可对字符指针变量赋值,但不能对数组名赋值。

char str[6]="hello";

char* p="hello";

/*等价于

char *p;

p="hello";

*/

②赋值方式

使用数组定义的字符串只能通过为数组中的元素逐一赋值或通过调用复制函数的方式来赋值;

使用指针定义的字符串还可以实现直接赋值

char *p1="hello";

char *p2=p1;

char str1[6]="hello";

char str2=str1;//错误写法

(3)字符指针和数组名

字符指针变量的值可以改变;

数组名是一个指针常量,其值不能改变。

(4)字符串中字符的引用

可以用下标法和地址引用。

char str[6]="hello";

char ch1=str[2];

char *p=str;

char ch2=*(p+2);

  • 作者:Jacky_Feng
  • 原文链接:https://blog.csdn.net/Jacky_Feng/article/details/109034254
    更新时间:2022年7月27日10:15:20 ,共 1912 字。