#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;
}
理解一下,二重指针传参、指针数组、数组指针
最新推荐文章于 2022-11-06 23:04:18 发布