刘若辰 发表于 2022-9-5 14:39:19

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

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

jhq999 发表于 2022-9-5 15:19:21

%s 是字符串,给printf函数一个字符串指针就行了

刘若辰 发表于 2022-9-5 16:22:31

jhq999 发表于 2022-9-5 15:19
%s 是字符串,给printf函数一个字符串指针就行了

我还是不太理解{:5_99:}

jhq999 发表于 2022-9-5 16:49:12

刘若辰 发表于 2022-9-5 16:22
我还是不太理解

char*pl是字符指针数组
pl就是“让编程改变……”这个常量字符串的指针
pl是“Juse do it……"的指针
……

桃花飞舞 发表于 2022-9-5 16:59:28

本帖最后由 桃花飞舞 于 2022-9-5 17:01 编辑

jhq999 发表于 2022-9-5 16:49
char*pl是字符指针数组
pl就是“让编程改变……”这个常量字符串的指针
pl是“Juse do it… ...

“让编程改变……”“Juse do it……" 是存储在哪里呢?常量区还是栈上面?为什么?应该是常量区。

桃花飞舞 发表于 2022-9-5 17:09:58

本帖最后由 桃花飞舞 于 2022-9-5 17:11 编辑

刘若辰 发表于 2022-9-5 16:22
我还是不太理解

如果是的话能不能理解
成printf后面直接用数组下标来访问里面的变量,所以不需要加*? 不能理解成这样。printf后面直接用数组下标来访问里面的变量,p p p是指针变量,存储的依然还是地址。之所以不要加星号是因为 printf 的格式符为%s时只需要传地址就可以访问整个字符串。 %d 时 需要传的是int类型的数据 而不是int * 所以 要给p p p 加星号

刘若辰 发表于 2022-9-5 17:19:56

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

懂了,那就是说指针数组里如果存的是字符串printf后面就无需加*,如果是其他正常的变量比如int型的就需要在地址前加*来取地址里的值吗

jhq999 发表于 2022-9-5 17:24:28

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

百度一下就知道了

桃花飞舞 发表于 2022-9-5 17:53:33

jhq999 发表于 2022-9-5 17:24
百度一下就知道了

没百度到。一维数组char * p = "Juse do it "; 字符串是存储在常量区,而char *p 这个指针数组里面存储的是地址,所以字符串应该也是在常量区存储的。

jhq999 发表于 2022-9-5 18:39:13

桃花飞舞 发表于 2022-9-5 17:53
没百度到。一维数组char * p = "Juse do it "; 字符串是存储在常量区,而char *p 这个指针数组里面存 ...

https://blog.csdn.net/mmindian/article/details/125991827

桃花飞舞 发表于 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 这种指针数组里面存的是字符串的首地址,字符串同样是存储在静态存储区,常量区。不过这让我想到了子函数中调用malloc函数也可以return p; 返回p指针 然后在主函数中用char * parr;来接收,malloc分配的的空间在堆上,也可以达到类似的效果
页: [1]
查看完整版本: 指针数组有个问题麻烦大家解答