数组指针和指针数组

数组指针

  int (*p)[n];

   首先P是一个指针,指向一个整型一维数组,这个数组的长度是n,也就是P的步长,

如果P++,那么P就跳过n长度到下一个数组,

   如果用指针定义一个二维数组

    int a[3][4];

    int (*p)[4]//定义一个数组指针,该指针指向一个有4个元素的一维数组

    p = a//将二维数组中首个一维数组的地址给指针,就是a[0]或者&a[0][0]

    p++//指针P指向的下一个一维数组就是a[1][ ];

所以数组指针是指向一维数组的指针,也就是行指针

输入二维数组的方法可以是:

for(i = 0 ; i < MAX_SIZE;i++)


//scanf("%s",*p + i)

//scanf("%s",&(*p)[i])

数组指针的使用条件是:函数传参的时候

一维数组名传参:用的是元素的指针 

  void  print_ptr(char *ptr)/void print_ptr(char ptr[100])

二维数组名传参:用的是一维数组的指针

void print_prt(char (*ptr)[100])/void print_prt(char **ptr)

三位数组名传参:用的是二维数组的指针

void print_ptr(char (*ptr)[3][100])/void print_ptr(char ***ptr)


//对一维数组的数组名取地址= 数组的地址

//对一维数组的地址取值= 数组元素的首地址


指针数组

int *p[n]:该数组中有n个指针类型的元素。

如要将二维数组赋给一指针数组:


int *p[3];


int a[3][4];


p++; //该语句表示p数组指向下一个数组元素。注:此数组每一个元素都是一个指针


for(i=0;i<3;i++)

{


初始化:因为定义一个指针数组,数组中的指针都是野指针,所

以要进行内存空间的分配


p[i] = (int *)malloc(sizeof(int));


p[i]=a[i];


}


这里int *p[3] 表示一个一维数组内存放着三个指针变量,分别是p[0]、p[1]、p[2]


所以要分别赋值。

例如:

用指针数组遍历字符串

char *ptr[3] = {"hello1","hello2","hello3"};

for(i = 0;i < 3;i++)

{

    printf("ptr[%d] = %s\n",i,ptr[i]);

}


函数传参

void  print_ptr(char **ptr)//因为数组里存放的是指针,所以形参必须用指针的针 

                                          来接参,传过来的实参是:指针变量或者是指针数组。

{


    int i;

    for(i = 0; i < 3;i++)

{

        //printf("%s\n",ptr[i]);

        // printf("%s\n",*(ptr + i));

}

}

_

数组指针只是一个指针变量,C语言里一般专门用来指向二维数组的,它占有内存中

个指针的存储空间。

指针数组是多个指针变量,以数组形式存在内存当中,占有多个

指针的存储空间。












































评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值