字符串和指针(c语言)

文章讨论了用数组和指针实现的字符串在内存占用上的区别,以及赋值操作的差异。数组实现的字符串直接存储字符,占用固定空间;指针实现的字符串则包括指针和字符串内容。在赋值时,数组使用strcpy函数,指针可直接赋值字符串地址。此外,文章还介绍了字符串数组的概念,即字符串作为数组元素存在,并提供了示例代码。
摘要由CSDN通过智能技术生成

一、用数组实现的字符串和用指针实现的字符串

 

上述str是用数组实现的字符串,而ptr是用指针来实现的字符串。

我们来讨论一下他们所占的内存的大小,str是直接创建一个数组里面存了’A‘ 、’B‘、’C‘、‘、‘\0’。

四个字符每个字符的数据类型是char所占的内存是4个字节。而ptr实现的字符串占几个字节?肯定有大部分认为是1个字节也就是指针的空间大小。其实不然所占据的一个是指针加上字符串的大小;而指针大小是4个字节再加上字符串的4个字节一共8个字节。

我们可以看看他们在内存中的分布。

二 用数组实现的字符串和用指针实现的字符串不同点

  赋值的不同

 先来看看两段代码

第一段代码中s=“DEF”是错误的。为什么?正确的赋值一共使用的是字符串函数strcpy(s,“DEF”) ;而p=“456”却可以这样来操作。我们直接来了解一下他们的原理吧。str数组是直接创建一个空间来存放字符串,而p是一个指针是用来存放地址的。而p=“456”只是将“456”的地址告诉了让p指向了“456"。而str这样操作的话就会改变数组的地址相当于数组在内存空间中移动了,这是不可能直接实现的。

我们可以用图来形象的说明这一情况

我们在这里可以通俗的理解为p是一个变量,而str是一个常量。变量可变而常量是不能够变化的。

最后我们可以了解一下printf打印字符串的原理。

我们知道数组名其实是首元素的地址。而打印的时候就是将首元素地址交给打印的函数,函数往下打印直到遇到\0,它便会停止。这就是为什么字符串可以直接打印,一般数组需要用循环打印。

三、字符串数组

上面我们了解的用数组实现的字符串和用指针实现的字符串,字符串数组就是将字符串“数组化”来实现的。听上去很高级。通俗的理解就是字符串变成了数组的一个元素。

比如定义一个字符数组char ch[]={'A','B','C'},而我们可以定义一个字符串数组只不过需要用到二维数组char ch2[][5]={"abc","def","ijk"}。至于为什么要用到二维数组你们可以想一下不懂的可以私信来问问我。

我们来看看代码

 a是用数组实现的字符串数组,p是用指针来实现的字符串数组。*p[]是一个指针数组用来存放指针的数组,它会分别指向p[0]、p[1]、p[2]。这就是为什么可以用于打印。它也可以像数组一样p[0][[0],来访问每一个字符串元素。我们可以看看他们分布的原理。

 今天的分享就到这里有啥子问题可以私信我啦。 

 

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值