0%

指针和字符串

这是一篇关于我刚学习C语言和C++的时候留下来的关于字符串、数组、指针的问题

起因

今天在看python的时候看到一个表达式字符串,这个东西呢,非常奇妙。
举个例子python里面的字符串有

1
2
str1 = " csmznbo "
str2 = ' csmznbo '

可以看到此时的字符串都是有空格,所以下面的那个单引号的明显不对劲,对了。
这个就是shell脚本里面类似的原样输出
特殊字符串。如下例子

1
2
3
4
#bash
str3='The time now is `data`'
#python
str3='The time now is data'.replace('data',str(time.localtime(time.time())))

其实python的””格式的字符串也是可以做到输出像上面的东西的,f”{}”也是可以的(format)
bash的例子只是引出这种字符串的特殊用法原样输出。下面的替换输出,虽然不是同一
功能,但是也能知道遇到这奇奇怪怪的字符串的时候可以联想起来好玩的东西。

但是这个不是今天的主角。

填坑

这个帖子,主要是为了记录我对指针数组还有字符串的理解。首先呢,我之前总是不理解为什么字符串是不可写和不可修改现在知道了,因为它存在静态区中。但是我学了几个月的C语言我才知道了指针不等于字符串,我当时写那些拼接函数,比较函数,裁剪那些,我都是用数组去实现的。但是学的懵懵懂懂的,我甚至都把数组等于字符串,字符串又等于指针去了,因为用起来真的差不多。其实是错误的,虽然汇编是一样当写关于字符串的函数的的时候,传参指针,返回值那些都是天坑。要知道字符串是不能修改的,所以返回值只能是数组和指针,还有就是指针传参就会导致一些问题。比如不知道数据长度等问题。

关系

指针就是指针,指向一个地址,自己指针又有一个属于自己的地址。大小看处理器位数数组就是连续地址的元素组成,可以装指针,数组,结构体,函数等等

C语言中,字符串就是字符串,没别的东西就是全局区的data段中,不可修改的。当时第一次学cpp的时候,把String当成字符串了,当时也好奇为什么字符串又可以删减修改了,其实就是一个容器,不是字符串,你可以认为里面就是一个数组真正的字符串还是””这个,这个还是不能修改即便是cpp。python中字符串也是不能修改的,每一次的修改,都只是新生成一个字符串。并没有修改原本字符串

结语

这次就是一个知识的填坑和巩固罢了果然基础不牢地动山摇。很多时候都是简单的东西罢了。拜拜,下次继续

-------------下次的来访是什么时候呢[doge]-------------