MatrixLab. 2022-02-22 20:40 采纳率: 100%
浏览 29
已结题

问一个关于c语言的问题:为什么函数里用**p接收数组名a?

img


看一下图片,为什么函数里用**p接收数组名a?对(char **p)不是很理解。

  • 写回答

3条回答 默认 最新

  • yun6853992 2022-02-22 20:57
    关注

    你需要了解这几个知识点:
    1:char * p;表示的初始化, p指向的是一个char变量的地址。
    2:char a[]; char数组,如果单纯的写数组名a,其实就是数组的首地址。 比如char a[] = "abc"; printf("%s \n",a); a其实指向的是数组的首地址
    3:结合起来理解 char *a[],其实就是二维数组,而a其实是二维数组的首地址,*p是第一个字符串的位置
    4:函数传参时 定义成char *p;传入参数一维数组char a[];的数组名a;,隐含的含义就是数组的首地址的位置 char **你可以理解为取一维数组a的地址的地址,而char a[]; a隐含的是一个地址,char * a[];换个角度就是存储了一个一维数组地址的char *类型,

    有点绕,可能我也说不清,char *p;p执向的是一个地址,char ** p;p执行的是一个地址的地址; char a[] = "abc";数组a隐含a指向数组的首地址,然后char *a[];指向数组首地址的地址,然后按地址+1,其实就是,移动的其实就是一个数组位。(可以用指针的方式打印这个二维数组内的字符串理解一下)

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月2日
  • 已采纳回答 2月22日
  • 创建了问题 2月22日

悬赏问题

  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看