鱼C论坛

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

[已解决]问题:关于指针数组的使用

[复制链接]
发表于 2023-2-25 12:40:31 | 显示全部楼层 |阅读模式

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

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

x

在使用指针数组的过程又一些疑问不理解,希望求助大佬给予帮助

问题描述:


  1. #include <stdio.h>

  2. int main(void)
  3. {
  4.     char str_01[] = {"《C程序设计》"}, str_02[] = {"《算法与数据结构》"};       
  5.     char *p[2]; // p 是一个拥有两个元素的指针数组

  6.     p[0] = str_01;
  7.     p[1] = str_02;
  8.     for(int i = 0; i < 2; i++)
  9.     {
  10.         printf("第%d本书:%s\n", i+1, *(p+i));
  11.     }
  12.     return 0;
  13. }
复制代码



`(p+i)` 表示数组的第i元素,`*(p+i)` 表示解引用数组的第i元素的地址。但是让我困惑的一点是 `(p+i)` 不就是 str_01数组的地址吗,为什么还要解引用?
最佳答案
2023-2-25 16:17:15
本帖最后由 jhq999 于 2023-2-25 16:18 编辑
cjgank 发表于 2023-2-25 12:50
对于数组的地址在打印输出时,不是可以直接使用其地址。例如


p[0]=str_01//数组p第1个元素储存着字符串指针str_01的值
p+0=&p[0]//p+0是数组p第1个元素的地址,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-2-25 12:43:38 | 显示全部楼层
本帖最后由 jhq999 于 2023-2-25 12:46 编辑

p+0是存有str_01数组地址值的指针
p+1是存有str_02数组地址值的指针
  1. *(p+i)等价于p[i]
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-25 12:50:02 | 显示全部楼层
jhq999 发表于 2023-2-25 12:43
p+0是存有str_01数组地址值的指针
p+1是存有str_02数组地址值的指针

对于数组的地址在打印输出时,不是可以直接使用其地址。例如


  1. printf("%s\n", str_01);
复制代码


既然可以直接使用数组的地址,那么在指针数组的引用就可以

  1. printf("%s\n", p+i);
复制代码


不知道我这样的理解是否正确?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-25 13:58:07 | 显示全部楼层
cjgank 发表于 2023-2-25 12:50
对于数组的地址在打印输出时,不是可以直接使用其地址。例如


第一个部分错误,第二个正确。

第一个说法对于字符数组/字符串来说其实是错误的,这份代码会直接输出整个字符串
但对于其它类型的数组,你的理解是正确的
第二份代码是正确的,它在运行时会输出i位以后的整个字符串
同样的,scanf也可以这么做(仅限字符串)。

有用请设置最佳答案,谢谢。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-25 16:17:15 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jhq999 于 2023-2-25 16:18 编辑
cjgank 发表于 2023-2-25 12:50
对于数组的地址在打印输出时,不是可以直接使用其地址。例如


p[0]=str_01//数组p第1个元素储存着字符串指针str_01的值
p+0=&p[0]//p+0是数组p第1个元素的地址,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-27 09:11:43 | 显示全部楼层
jhq999 发表于 2023-2-25 16:17
p[0]=str_01//数组p第1个元素储存着字符串指针str_01的值
p+0=&p[0]//p+0是数组p第1个元素的地址,

我明白了

其实指针数组p有五个连续地址的元素,每个元素的值存放一个指针。
(p+i)只是得到第i个元素,要想得到第i个元素的值就还要解引用*(p+i)。

谢谢解答
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-6 15:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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