[指针一]结构体数组作为形参传递,下标访问和指针访问使用该结构体

在通常结构化编程中,通常涉及到数据做成和传递,我们通过参数传递一块内存区域的指针到函数中,希望在函数中做成指定格式的数据,放在传递到函数的指针所指向的内存区域,在主函数中通过传递到函数中的指针访问该内存。

在访问该内存区域时,通常有两种方法,一种是通过下标的方法访问指针中数据,另一种方法是通过指针的方法。

例如:

typedef struct{
int cout;
char path[256];
char filename[64];
}info_s;

1.下标访问:定义结构体数组info_s data[20],可以通过下标访问data[0].cout,data[0].path,data[0].filename。

2.指针访问:定义结构体数组info_s data[20],定义结构体指针变量info_s *ptr,该指针指向结构体数组ptr = data,通过指向该结构体数组的指针ptr来访问结构体数组中的数据。ptr->cout;ptr->path,ptr->filename,访问的是data[0]中的数据,ptr++指向data[1],通过ptr指向的移动来依次访问data中数据。

例子1:下标访问

#include
#include
typedef struct{
int cout;
char path[256];
char filename[64];
}info_s;
void get_information(void * data)
{
info_s *info = (info_s *)data;
int i = 0;
for(i = 0; i< 20;i ++)
{
info[i].cout = i+1;
if(i%2)
{
memcpy(info[i].path,"/home/imx/shares",sizeof("/home/imx/shares"));
memcpy(info[i].filename,"imx",sizeof("imx"));
}
else
{
memcpy(info[i].path,"/home/test/shares",sizeof("/home/test/shares"));
memcpy(info[i].filename,"test",sizeof("test"));
}
}
}
int main()
{
info_s info[20];
int i = 0;
memset(info,0,sizeof(info));
get_information(info);
for(i = 0;i < 20;i++)
{
printf("count:%d\n",info[i].cout);
printf("path:%s\n",info[i].path);
printf("name:%s\n\n\n",info[i].filename);
}
return 0;
}

例子1:指针访问

#include
#include
typedef struct{
int cout;
char path[256];
char filename[64];
}info_s;
void get_information(void * data)
{
info_s *info = (info_s *)data;
int i = 0;
for(i = 0; i< 20;i ++)
{
info->cout = i+1;
if(i%2)
{
memcpy(info->path,"/home/imx/shares",sizeof("/home/imx/shares"));
memcpy(info->filename,"imx",sizeof("imx"));
}
else
{
memcpy(info->path,"/home/test/shares",sizeof("/home/test/shares"));
memcpy(info->filename,"test",sizeof("test"));
}
info ++;
}
}
int main()
{
info_s info[20];
int i = 0;
memset(info,0,sizeof(info));
get_information(info);
for(i = 0;i < 20;i++)
{
printf("count:%d\n",info[i].cout);
printf("path:%s\n",info[i].path);
printf("name:%s\n\n\n",info[i].filename);
}
return 0;
}

你可能感兴趣的:(指针)