0
点赞
收藏
分享

微信扫一扫

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

七千22 2022-01-06 阅读 66
#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;
  }
举报

相关推荐

0 条评论