一包笼子 2024-01-06 15:41 采纳率: 83.3%
浏览 7
已结题

c语言指针与函数的相关问题

qzjhjxj 柯本 雁过旧相识 c语言指针与函数
arr是二维数组
*p(子函数)指的是啥
为什么子函数指针函数后面是[4],是把它当作一个一维数组吗
*p (主函数)指的是啥
pp指的是啥

#include<stdio.h>
int *search(int (*p)[4],int k){
    int *pp;
    pp=*(p+k);
    return pp;
}
int main(){
    int arr[3][4]={
        {20,30,40,50},
        {30,40,50,60},
        {55,65,75,85}
    };
    int k;
    scanf("%d",&k);
    int *p;
    p=search(arr,k);
    for(int i=0;i<4;i++){
        printf("%d",*(p+i));
    }
    return 0;
} 
  • 写回答

2条回答 默认 最新

  • 抑郁的代码男孩 2024-01-06 16:49
    关注

    1、函数形参里的 *p,即int (*p)[4],p是指向长度为4的数组的指针,而int *p[4],是指针数组,即数组元素是int *,长度为4,注意区分
    2、函数里对 p 做算术运算,实际上相当于移动 k 个单位,因为p是指向数组的指针,所以p + k实际上是p[k],每个元素是长度为4的数组,即&p[k][0]
    3、函数返回的类型是int *,主函数里的p是int *类型,此时p的指向是arr[k]的数组的首元素地址,因为函数返回拷贝。但 p + i 此时就是按照p的类型即int *移动 i 个单位,所以输出的是arr[k][i]

    Tips:
    1、指针的算术运算,p + n,n的实际移动是根据p指向的数据类型的大小移动n个单位
    2、下标[]的优先级高于解引用,但是因为有括号,所以先执行,再执行[],p先是指针,再是指向数组的指针,这样去理解有关的复杂类型声明

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

报告相同问题?

问题事件

  • 系统已结题 1月14日
  • 已采纳回答 1月6日
  • 创建了问题 1月6日

悬赏问题

  • ¥15 51单片机PN532刷卡原理图代码
  • ¥15 matlab如何不显示绘图而保存为能打开的fig图片?
  • ¥15 oracle数据库备份、
  • ¥15 关于Finetune模型,CUDA error: device-side assert triggered 报错
  • ¥15 能将阿里云上多个设备的信息能上传给小程序吗
  • ¥50 QT6.7 Camera预览窗口,camera分辨率设置
  • ¥15 车机是安卓4.4.3,车机没有gps,我想用外置蓝牙gps。所以在用安卓模拟位置服务时候,我下载的相关软件不显示在列表里
  • ¥15 matlab水位控制系统(详解)
  • ¥15 CST软件仿真,已知中心线方程构建图形
  • ¥15 supLink 用户定位