字符串和字符串函数之学习笔记(二)

好哒,让我们接着上一次的问题开始~~
指针时,无法修改字符串内容,因为这个字符串放在内存的常量区,而内存的常量区时只读
但是如果用数组的方式定义,会在储存于内存常量区之后在栈上分配空间、容纳字符串,
区别在于:用数组定义的方式会产生副本,而指针的定义只是让指针指向内存常量区的地址,所以,数组方式才可以修改
所以,建议把指针初始化为字符串字面量时,使用const限定符

2.字符串数组
首先,字符串就很像一个数组,又来了个数组的数组,嘿嘿,那不就是二维数组嘛
下面附上一个代码,大致熟悉熟悉字符串的二维数组的规则:

#include <stdio.h>
#define SLEN 40
#define LIM 5
int main ()
{
 const char *mytalents[LIM]={
  "Adding numbers swiftly",
  "Multiplying accurately",
  "Stashing data",
  "Following instructions to the letters",
  "Understand the c language"
 };
 char yourtalents [LIM][SLEN]={
  "Walking in a straight line",
  "Sleeping",
  "Watching television",
  "Mailing letters",
  "Reading email"
 };
 
 puts("Let's compare talents.");
 printf("%-36s  %-25s\n","My talents","Your talents");
 for(int i=0;i<LIM;i++)
 {
  printf("%-36s  %-25s\n",mytalents[i],yourtalents[i]);
 }
 printf("\nsizeof mytalents:%zd,sizeof yourtalents %zd\n",sizeof(mytalents),sizeof(yourtalents));
 
 return 0;
} 

在这里插入图片描述
使用一个下标时,表示一个字符串
使用两个下标时,代表一个字符

mytalents数组是一个内含5个指针的数组,共占40字节
yourtalents数组是一个内含5个数组的数组,每个数组内含40个char类型的值,共占用200字节
所以二者类型并不相同

字符串数组分配内存的使用率较低,即每个元素的大小必须相同,而且必须是能储存最长字符串的大小
但指针指向的字符串字面量不能更改
各有利弊,按需使用

3.指针和字符串

#include <stdio.h>
int main ()
{
 const char * mesg="Don't be a fool!";
 const char * copy;
 
 copy=mesg;
 printf("%s\n",copy);
 printf("mesg=%s &mesg=%p value=%p\n",mesg,&mesg,mesg);
 printf("copy=%s &copy=%p value=%p\n",copy,&copy,copy);
 return 0;
}

在这里插入图片描述
第二项显示两个指针的地址即指针mesg和copy分别储存的地址
最后一项显示两个指针的值即它们的储存地址,相同就说明它们都指向同一个位置
所以说明,并没有拷贝数组

下面的话,我们就要学习字符串函数喽

weixin073智慧旅游平台开发微信小程序+ssm后端毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值