理解一下,二重指针传参、指针数组、数组指针

#include <stdio.h>                                                          

   void fun1(char *arr[],int n)//指针数组传参
   {
     int i;
     for(i=0;i<n;i++)
           printf("%s",arr[i]);
   }
   void fun2(char **arr,int n)//二重指针传参
   {
     int i;
     for(i=0;i<n;i++)
           printf("%s",arr[i]);
   }
   
  int main(void)
  {
    char *s[4]={"League ","of ","Heroes","\n"};
    fun1(s,4);
    fun2(s,4);
    /*上面两个函数结果相等:验证二重指针传参可以等价于指针数组。*/

    /*1、下面区别一下指针数组和数组指针。
    指针数组:即指针类型的数组,本质是数组,数组里的元素都是指针,比如上面的char *s[4]={"League","of","Heroes","\n"},为了看的直观一些可以看成 (char *) s[4]={"League","of","Heroes","\n"};
    数组指针:即数组类型的指针,本质是指针,指针指向的是这个数组的首地址,比如下面的char (*sa)[4]=&p; 为了看的直观一些可以看成 char [4] (*sa)=&p;
    2、注意区别数组的首地址和数组首元素的首地址。
    例如:int a[5]={1,2,3,4,5};
    尽管a 和&a的值是一样的,但是类型不一样:
    a 作为地址是 int *类型的--------->数组首元素的首地址
    &a 地址是int (*)[5]类型的-------->数组的首地址
    */
    char p[4]={'Q','W','E','R'};
    char (*sa)[4]=&p;//所以这里只能传&p,而不能传p

    return 0;
  }

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值