鱼C论坛

 找回密码
 立即注册
查看: 2866|回复: 10

指针数组有个问题麻烦大家解答

[复制链接]
发表于 2022-9-5 14:39:19 | 显示全部楼层 |阅读模式

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

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

x
这两个程序都是小甲鱼讲指针数组时举的例子,第一个我觉得应该是因为指针变量存储的是一个地址,所以里面加了取地址符,
最后通过间接引用指针的方法依次输出五个变量的值。第二个不知道是不是直接用指针变量充当数组名?如果是的话能不能理解
成printf后面直接用数组下标来访问里面的变量,所以不需要加*?
995B5F62DEC8E6D15C1CD7D93BF0FFD4.png
F5B6D3FD7EB22BE0B8224A5C7AD1AB49.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-9-5 15:19:21 | 显示全部楼层
%s 是字符串,给printf函数一个字符串指针就行了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-9-5 16:22:31 | 显示全部楼层
jhq999 发表于 2022-9-5 15:19
%s 是字符串,给printf函数一个字符串指针就行了

我还是不太理解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-5 16:49:12 | 显示全部楼层


char*pl[5]是字符指针数组
pl[0]就是“让编程改变……”这个常量字符串的指针
pl[1]是“Juse do it……"的指针
……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-5 16:59:28 | 显示全部楼层
本帖最后由 桃花飞舞 于 2022-9-5 17:01 编辑
jhq999 发表于 2022-9-5 16:49
char*pl[5]是字符指针数组
pl[0]就是“让编程改变……”这个常量字符串的指针
pl[1]是“Juse do it… ...


“让编程改变……”  “Juse do it……" 是存储在哪里呢?常量区还是栈上面?为什么?应该是常量区。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-5 17:09:58 | 显示全部楼层
本帖最后由 桃花飞舞 于 2022-9-5 17:11 编辑


如果是的话能不能理解
成printf后面直接用数组下标来访问里面的变量,所以不需要加*? 不能理解成这样。printf后面直接用数组下标来访问里面的变量,p[0] p[1] p[2]  是指针变量,存储的依然还是地址。  之所以不要加星号是因为 printf 的格式符为%s  时只需要传地址就可以访问整个字符串。 %d 时 需要传的是int类型的数据 而不是int * 所以 要给p[0] p[1] p[2] 加星号
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-9-5 17:19:56 | 显示全部楼层
桃花飞舞 发表于 2022-9-5 17:09
如果是的话能不能理解
成printf后面直接用数组下标来访问里面的变量,所以不需要加*? 不能理解成这样 ...

懂了,那就是说指针数组里如果存的是字符串printf后面就无需加*,如果是其他正常的变量比如int型的就需要在地址前加*来取地址里的值吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-5 17:24:28 | 显示全部楼层
桃花飞舞 发表于 2022-9-5 16:59
“让编程改变……”  “Juse do it……" 是存储在哪里呢?常量区还是栈上面?为什么?应该是常量区。

百度一下就知道了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-5 17:53:33 | 显示全部楼层
jhq999 发表于 2022-9-5 17:24
百度一下就知道了

没百度到。一维数组char * p = "Juse do it "; 字符串是存储在常量区,而char *p[3] 这个指针数组里面存储的是地址,所以字符串应该也是在常量区存储的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-5 18:39:13 | 显示全部楼层
桃花飞舞 发表于 2022-9-5 17:53
没百度到。一维数组char * p = "Juse do it "; 字符串是存储在常量区,而char *p[3] 这个指针数组里面存 ...

https://blog.csdn.net/mmindian/article/details/125991827
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-6 01:00:22 | 显示全部楼层
本帖最后由 桃花飞舞 于 2022-9-6 05:27 编辑
jhq999 发表于 2022-9-5 18:39
https://blog.csdn.net/mmindian/article/details/125991827


麻烦你了,我从别的地方确认了这个问题。楼主的贴子最别扭的地方就是数组元素是指针,这文章从另一个方面说明了一维数组char* p = "Juse do it",字符串存储在静态存储区, 指针指向字符串,字符串存储在常量区,所以char *p[3] 这种指针数组里面存的是字符串的首地址,字符串同样是存储在静态存储区,常量区。不过这让我想到了子函数中调用malloc函数也可以return p; 返回p指针 然后在主函数中用char * parr;来接收,malloc分配的的空间在堆上,也可以达到类似的效果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-28 07:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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