指向结构体的指针数组,应用

数组指针跟指针数组,差异看起来很小,结果却千差万别:

数组指针: struct param (*p)[100]

        p+1 的结果是地址会增大 100个 sizeof(struct param),这种常用来去对二维数组进行位置的索引。

指针数组: struct param *p[100]

        这里创建了一个100个struct param 指针的数组, p+1是指向数组里下一个struct param,可以用下标进行缩影: p[1]

指针数组的作用,大概是为了为了管理不是有序存储的数据而存在的吧,通过某种索引方法将数据集结在一起供程序统一处理。

在此将展示如何使用指针数组,并传递给某个函数让它去填充数据。

#include<stdio.h>
#include<string.h>

struct param{
    int num;
    int tempnum;
    char *buff;
};

struct param params[6];

char* buff1 = "buff1";
char* buff2 = "buff2";
char* buff3 = "buff3";
char* buff4 = "buff4";
char* buff5 = "buff5";
char* buff6 = "buff6";

int init()
{ 
    params[0].num = 1;
    params[0].buff = buff1;
    params[1].num = 2;
    params[1].buff = buff2;
    params[2].num = 3;
    params[2].buff = buff3;
    params[3].num = 4;
    params[3].buff = buff4;
    params[4].num = 5;
    params[4].buff = buff5;
    params[5].num = 6;
    params[5].buff = buff6;
    return 0;
}

int test(struct param **args)
{
    args[0] = &params[2];
    printf("addr0 = %ld\n",&args[0]); //打印出地址
    args[1] = &params[4];
    printf("addr1 = %ld\n",&args[1]); //打印出地址
}



int main()
{
    struct param (*p)[100];
    printf("param addr0 = %p\n",&p);  //打印出地址
    printf("param addr1 = %p\n",&p+1); //打印出地址
    init();
    test( (struct param**) &p);
    printf("%d: %s\n",p[1]->num, p[1]->buff);
    return 0;
}





©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页