指针数组与数组指针、数组传入函数后的故事

指针数组与数组指针


1、介绍(百度百科):

数组指针是指向数组地址的指针,其本质为指针;
指针数组是数组元素为指针的数组(例如 int *p[3],定义了p[0],p[1],p[2]三个指针),其本质为数组。


2、代码:

#include <stdio.h>
int main()
{
    int *p1[3];//指针数组,本质:数组
    int (*p2)[3];//数组指针,本质:指针
    int *p3;//int 指针
    int a[3][3]={1,2,3,4,5,6,7,8,9};
    int b[4]={10,11,13,14};
    //指针数组
    printf("指针数组\t");
    for(int i=0;i<2;++i)
    {
       p1[i]=a[i];
    }
    p1[2]=b;
    for(int i=0;i<3;++i)
    {
       printf("%d\t",*(p1[i]+1));//每个数组第二个元素
    }
    //数组指针
    printf("\n数组指针\t");
    p2=b;
    for(int i=0;i<3;++i)
    {
       printf("%d\t",(*p2)[i]);//数组式访问
    }
    printf("\n\t\t");
    for(int i=0;i<3;++i)
    {
       printf("%d\t",*(*(p2)+i));//指针式访问
    }
    //数组名
    printf("\n数组名\tb:%d\t&b:%d\t&b[0]:%d",b,&b,&b[0]);
    //int指针
    p3=b;
    printf("\nint 指针  p3[1]  %d\n",p3[1]);//将常量给变量,两种访问形式
    return 0;
}


3、结果:
这里写图片描述


4、总结:
A、指针数组:是一个数组p[],里面都装的指针,指向某数组(大小不限),p+1跳跃到下一个数组元素(也是指针)。
B、数组指针:是一个指针p,指向该类型数组a(大小已定)。p+1跳跃整个数组a,指向数组a结束处。说白了,就是指针,然后(*p)。当然,如果将他指向二维数组则指向每行。

     p2=a;
    for(int i=0;i<3;++i)
    {
       printf("%d\t",(*p2)[i]);//数组式访问第一行
    }
    printf("\n\t\t");
    for(int i=0;i<3;++i)
    {
       printf("%d\t",*(*(p2+1)+i));//指针式访问第二行
    }

这里写图片描述

这里的数组跳跃,就是跳跃二维数组的每个子数组。这时候,他就是二维数组指针。而对于指针数组,他的每一个元素需要进行初始化,是无法像数组指针这样初始化后访问的。
C、还有数组名,b和&b的值是一样的,我觉得应该是&b当作&b[0]来对待的。


数组传入函数后的故事


1、代码:

#include <stdio.h>
#include <stdlib.h>

//指针数组

void writelines(char *lineptr[], int nlines)
{
    while (nlines-- > 0)
        printf("%s\n", *lineptr++);//指针变量
}

int main()
{
    char *lineptr[]={"qqqq","aaaaaa","bbbbb"};
    int n=3;
    while (n-- > 0)
        printf("%s\n", lineptr[n]);//指针常量
    printf("\nHello world!\n");
    writelines(lineptr,3);
    return 0;
}

2、结果:
这里写图片描述

3、总结:
指针数组传入函数后做变量!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值