目录
字符串和指针有着紧密·的联系,下面我们就来学习字符串和指针的相似点和不同点。
用数组实现的字符串和用指针实现的字符串
下面我们来看用数组和指针实现的字符串
#include<stdio.h>
int main()
{
char str[] = "ABC";
char *ptr = "123";
printf("str=\"%s\"\n", str);
printf("ptr=\"%s\"\n", ptr);
return 0;
}
让我们来结合两图来分析它们的异同:
█用数组实现的字符串str
str是char[4]类型的数组,各元素从开头开始依次用‘A’ 'B' 'C' '\0'进行初始化,char数组占据的内存空间和数组元素个数一致,可以通过sizeof(str)求得
█用指针实现的字符串ptr
ptr是指向char型变量的指针变量,它的初始值为字符串字面量“123”,对字符串字面量进行判定,可以得到指向该字符串字面量第一个字符的指针,所以ptr被初始化为指向保存在内存中的字符串字面量“123”的第一个字符‘1’的指针
另外一般情况下,我们把指针p指向字符串字面量“string”的首个字符‘s’,称为“指针p指向string”
需要注意的是指针ptr不可进行如下声明:
char *ptr = {'1', '2', '3', '\0'};
数组用的{ }形式的初始值,不可以用于单一的变量
从上面的图可以看出,指针ptr和字符串字面量“123”都占用了空间,指针ptr占用的空间为sizeof(ptr),即sizeof(char*)字节,其长度因编译器而异。
请注意,用指针实现的字符串相比于数组需要更多的内存空间。
注意
指针p是指向字符串首个