鱼C论坛

 找回密码
 立即注册
查看: 1261|回复: 5

[已解决]字符指针

[复制链接]
发表于 2018-8-5 17:47:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
初学C语言   指针那里有些问题
用指针变量储存字符串不是相当于 先用数组储存字符串,再用指针指向这个字符数组吗?
为什么小甲鱼老师说用指针变量储存字符串和用数组储存字符串在内存中的储存位置不同?
最佳答案
2018-8-5 17:53:02
确实不同啊。
指针是不能存储字符串的,它只能指向一个字符串。
指针本身储存的位置是和它指向的地方不同的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-8-5 17:53:02 | 显示全部楼层    本楼为最佳答案   

回帖奖励 +1 鱼币

确实不同啊。
指针是不能存储字符串的,它只能指向一个字符串。
指针本身储存的位置是和它指向的地方不同的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-5 18:01:46 | 显示全部楼层
那这两种方式 字符串应该都是储存在字符数组里的啊
那不是都在同一个内存分区里吗
但小甲鱼老师说用指针储存字符串时会把它放到常量存储区里面
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-5 18:38:19 | 显示全部楼层
其实不是很了解你的疑惑。如果同时有字符串与数组被定义,或者说任何的变量被定义,那么它们在内存的位置当然不一样,跟指针没有关系。

char a[5] = {'1','2','3','4','\0'}   ==    char a [5] = {"1234"}
int a[5] = [1,2,3,4,5]

字符串的本质是一个数组,被包装起来而已。至于指针的用法,作用在数组或字符串都是一样的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-5 18:50:55 | 显示全部楼层
ZTQ 发表于 2018-8-5 18:01
那这两种方式 字符串应该都是储存在字符数组里的啊
那不是都在同一个内存分区里吗
但小甲鱼老师说用指针 ...

不要想得太复杂,就是【栈】与【堆】而已。什么宏定义、全局变量等,都是在【堆】,慢慢往上堆叠。
我上面的例子不太好,应该是 char a[5],int b[5];如果两个变量被定义了,就会分配属于自己的内存块,两者部冲突~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-6 11:22:49 | 显示全部楼层
指针相当于指向一个内存地址,  而数组相当于在内存空间开辟一小段空间存续数据,两者概念是不同的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-17 17:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表