很能跑 2022-10-27 21:01 采纳率: 75%
浏览 35
已结题

指针数组不太理解,还有指针的指针也有疑惑

问题遇到的现象和发生背景

char **q,不明白为什么要定义指针的指针

用代码块功能插入代码,请勿粘贴截图
#include<stdio.h>
void main()
{
    char *s[]={"man","woman","girl","boy","sister"};
    char **q;
    int k;
    for(k=0;k<5;k++)
    {
        q=s+k;
        printf("%s\n",*q);
    }
    
}

运行结果及报错内容
man
woman
girl
boy
sister

请按任意键继续. . .

我的解答思路和尝试过的方法

char *s[]={"man","woman","girl","boy","sister"};这里定义了指针数组,数组内存放的是四个指针

我想要达到的结果

*q就能取出里面的单词的时候,定义**q是为什么,不定义又不能输出正确结果

  • 写回答

1条回答 默认 最新

  • 谢玄. 2022-10-28 16:31
    关注

    这么和你说吧,char *a = "string" 会先创建一个内存存放字符串"string"。然后再让你的指针a指向这个字符串开始的位置。
    同理 char *s[]={"man","woman","girl","boy","sister"}; 就是创建了一个指针列表。
    当你单独写s时,s返回的是 地址 , 相当于&s[0] 这个的结果也就是存放s[0]这个指针的地址。所以你需要用二级的指针去获取。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 11月25日
  • 已采纳回答 11月17日
  • 请采纳用户回复 11月12日
  • 创建了问题 10月27日

悬赏问题

  • ¥15 TLS1.2协议通信解密
  • ¥40 图书信息管理系统程序编写
  • ¥20 Qcustomplot缩小曲线形状问题
  • ¥15 企业资源规划ERP沙盘模拟
  • ¥15 树莓派控制机械臂传输命令报错,显示摄像头不存在
  • ¥15 前端echarts坐标轴问题
  • ¥15 ad5933的I2C
  • ¥15 请问RTX4060的笔记本电脑可以训练yolov5模型吗?
  • ¥15 数学建模求思路及代码
  • ¥50 silvaco GaN HEMT有栅极场板的击穿电压仿真问题