详解指针C(3)

1.字符数组与字符串

在这里插入图片描述

2、常量区

每一个exe使用内存的时候,是把内存分成不同的区域的
在这里插入图片描述
数据区包括全局变量和常量区。
在这里插入图片描述
出现0xC0000005表示的意思是访问错误。,一般对内存做了非法读写的时候,就会出现这个错误。
1、哪个可以修改?哪个不能改?
在这里插入图片描述
经实验发现*(x+1)='A’出现访问错误提示。说明不能改*(x+1)的值
后面我又在上面的条件下,加了一行代码
在这里插入图片描述
发现编译没有出错,说明x的值是可以改的,是x指向的那个字符串“china自己"本身不能改
那为什么不能让我们改呢?
因为x指向那个字符串存储在常量区。
那为什么y[1]能改呢?
因为数组y在全局区。
2、哪个可以修改?哪个不能改?
在这里插入图片描述

在这里插入图片描述
可以发现y数组已经把常量区的字符串拷贝了一份到堆栈了。
所以*(x+1 )=‘A’会失败;
y[1]='A’会成功;

3、常见字符串操作

// 1.判断字符串的长度的函数
int strlen (char * s)
{
int ret =0;
while(*s !=0)
{
ret++;
s++;

}
return ret;
}

//2、char* strcpy (char* dest, char* src);
复制字符串src到dest中。返回指针为dest的值。

char * strcpy (char * dest,char *src)
{ char * ret =dest;
while((*dest++) =(*src++));
return ret;
}

//3、char* strcat (char* dest, char* src);
将字符串src添加到dest尾部。返回指针为dest的值。

char* stract (char* dest, char* src)
{
char* ret=dest;
while(*dest !=0)
{
dest++;

}
while((*dest++) = (*src++));
return ret;
}

//4、int strcmp ( char* s1, char* s2);
一样返回0 不一样返回1
int strcmp(char* s1, char* s2)
{
while(*s1 != ‘\0’ && *s2 != ‘\0’)
{
if(*s1 != *s2)
{
return 1;
}
s1++;
s2++;

if(*s1 == ‘\0’ && *s2 == ‘\0’)
{
return 0;
}
else
{
return 1;
}
}
}

指针函数:其实就是一个函数,只不过他的返回值是个指针而已。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值