怎样在一个.c档里面取引用另一个.c档里面的静态结构体数组
来源:互联网 发布:win10固态硬盘优化 编辑:程序博客网 时间:2024/05/18 09:18
结构体、指针的应用
结构体的首地址,其实可以看成是一个32bit的整形数据。
下面来看一个实例,关于结构体在、指针的灵活应用
方案一
假设在aaarry.h定义一个结构体,及函数的申明
ypedef struct _AAA
{
int x;
int y;
} AAA, *pAAA;
void getpoint( int * p);
aaarry.cpp中函数的定义
static AAA Arry[3]={{1,2},{2,3},{3,4}};
void getpoint( int * p)
{
(*p) =(int )Arry;
return;
}
想在getpoint.cpp中通过函数去引用Arry数组的元素,通过调用函数getpoint来实现。
int i=0;
int * p;int a[6]={0};
extern void getpoint( int * p);
getpoint(&i);
p=(int *)i;
for ( int j=0; j<6; j++)
{
a[j]=(*p);
p++;
}
分析上面的代码:定义一个整数i,将i的地址作为getpoint的形参去处理。
(*p)=(int)Arry 将结构体的首地址强制转换为整数,前面说过结构体的首地址,其实是一个32bit的整形。
getpoint(&i) 这条语句将i的值发生改变,其地址不变。
p=(int *)i;将i的值强制转化为地址,即结构体的首地址,for循环即可通过首地址,来获取里面的值。注意p++,加4个byte,int型数据,也是占4个byte.
方案二
一个函数的返回值只可能有一个,要想将一个数组的多个元素通过返回值返回给主调函数是不可能的。那么在这里我们通过返回结构体数组的首地址即可获得结构体数组的每个元素。
aaarry.cpp中函数的定义
int getpoint()
{
return (int )Arry;
}
getpoint.cpp中通过函数去引用Arry数组的元素,通过调用函数getpoint来实现。
int i = getpoint();
int *p = (int *)i;
for ( int j=0; j<6; j++)
{
a[j]=(*p);
p++;
}
方案三
直接接地址返回给一个函数指针变量
aaarry.cpp中函数的定义
int * getpoint()
{
return (int *)Arry;
}
getpoint.cpp中通过函数去引用Arry数组的元素,通过调用函数getpoint来实现。
int *p = getpoint();
for ( int j=0; j<6; j++)
{
a[j]=(*p);
p++;
}
方案一、二、三的思想是一样的,目的是取得结构体数组的首地址,然后通过其首地址访问其值。
方案四
getpoint的形参为二维数组,其里面的值为地址int *B[3][2]
aaarry.cpp中函数的定义
void getpoint( int *B[3][2])
{
int i;
int j;
for(i=0;i<3;i++)
{
B[i][0]=&(Arry[i].x);
B[i][1]=&(Arry[i].y);
printf("%d,%d\r\n",B[i][0],B[i][1]);
}
}
B[i][0]=&(Arry[i].x);
B[i][1]=&(Arry[i].y); 将结构体数组元素的地址赋值给二维数组元素。
getpoint.cpp中通过函数去引用Arry数组的元素,通过调用函数getpoint来实现。
void getpoint(int *B[3][2]);
int *A[3][2]={0};
int ps[6]={0};
char a[5]={0};
int point[6]={0};
getpoint(A);
int i,j,y;
int k=0;
for(i=0;i<3;i++)
{
for(j=0;j<2;j++)
{
ps[k]=*(A[i][j]);
itoa(ps[k],a,10);
str1.Format("ps[%d]=%s\r\n",k,a);
str+=str1;
k++;
}
}
SetDlgItemText(IDC_EDIT1,str);
return ;
}
ps[k]=*(A[i][j]) 将从结构体数组得到的地址,取其值,保存在ps数组里面。并在编辑框中显示。
方案五
如果getpoint.cpp中可以找到结构体AAA的定义。
aaarry.cpp中函数的定义
void getpoint(AAA p[3])
{
for(int i=0; i<3 ;i++)
{
p[i] = Arry[i];
}
}
getpoint.cpp中通过函数去引用Arry数组的元素,通过调用函数getpoint来实现
extern void getpoint(AAA p[3]);
AAA aa[3]={0};
getpoint(aa);
p[i]=Arry[i]; 将结构体数组Arry每个元素的首地址赋值给p,即数组的行地址。即可取得数组里面的值。
结构体的首地址,其实可以看成是一个32bit的整形数据。
下面来看一个实例,关于结构体在、指针的灵活应用
方案一
假设在aaarry.h定义一个结构体,及函数的申明
ypedef struct _AAA
{
int x;
int y;
} AAA, *pAAA;
void getpoint( int * p);
aaarry.cpp中函数的定义
static AAA Arry[3]={{1,2},{2,3},{3,4}};
void getpoint( int * p)
{
(*p) =(int )Arry;
return;
}
想在getpoint.cpp中通过函数去引用Arry数组的元素,通过调用函数getpoint来实现。
int i=0;
int * p;int a[6]={0};
extern void getpoint( int * p);
getpoint(&i);
p=(int *)i;
for ( int j=0; j<6; j++)
{
a[j]=(*p);
p++;
}
分析上面的代码:定义一个整数i,将i的地址作为getpoint的形参去处理。
(*p)=(int)Arry 将结构体的首地址强制转换为整数,前面说过结构体的首地址,其实是一个32bit的整形。
getpoint(&i) 这条语句将i的值发生改变,其地址不变。
p=(int *)i;将i的值强制转化为地址,即结构体的首地址,for循环即可通过首地址,来获取里面的值。注意p++,加4个byte,int型数据,也是占4个byte.
方案二
一个函数的返回值只可能有一个,要想将一个数组的多个元素通过返回值返回给主调函数是不可能的。那么在这里我们通过返回结构体数组的首地址即可获得结构体数组的每个元素。
aaarry.cpp中函数的定义
int getpoint()
{
return (int )Arry;
}
getpoint.cpp中通过函数去引用Arry数组的元素,通过调用函数getpoint来实现。
int i = getpoint();
int *p = (int *)i;
for ( int j=0; j<6; j++)
{
a[j]=(*p);
p++;
}
方案三
直接接地址返回给一个函数指针变量
aaarry.cpp中函数的定义
int * getpoint()
{
return (int *)Arry;
}
getpoint.cpp中通过函数去引用Arry数组的元素,通过调用函数getpoint来实现。
int *p = getpoint();
for ( int j=0; j<6; j++)
{
a[j]=(*p);
p++;
}
方案一、二、三的思想是一样的,目的是取得结构体数组的首地址,然后通过其首地址访问其值。
方案四
getpoint的形参为二维数组,其里面的值为地址int *B[3][2]
aaarry.cpp中函数的定义
void getpoint( int *B[3][2])
{
int i;
int j;
for(i=0;i<3;i++)
{
B[i][0]=&(Arry[i].x);
B[i][1]=&(Arry[i].y);
printf("%d,%d\r\n",B[i][0],B[i][1]);
}
}
B[i][0]=&(Arry[i].x);
B[i][1]=&(Arry[i].y); 将结构体数组元素的地址赋值给二维数组元素。
getpoint.cpp中通过函数去引用Arry数组的元素,通过调用函数getpoint来实现。
void getpoint(int *B[3][2]);
int *A[3][2]={0};
int ps[6]={0};
char a[5]={0};
int point[6]={0};
getpoint(A);
int i,j,y;
int k=0;
for(i=0;i<3;i++)
{
for(j=0;j<2;j++)
{
ps[k]=*(A[i][j]);
itoa(ps[k],a,10);
str1.Format("ps[%d]=%s\r\n",k,a);
str+=str1;
k++;
}
}
SetDlgItemText(IDC_EDIT1,str);
return ;
}
ps[k]=*(A[i][j]) 将从结构体数组得到的地址,取其值,保存在ps数组里面。并在编辑框中显示。
方案五
如果getpoint.cpp中可以找到结构体AAA的定义。
aaarry.cpp中函数的定义
void getpoint(AAA p[3])
{
for(int i=0; i<3 ;i++)
{
p[i] = Arry[i];
}
}
getpoint.cpp中通过函数去引用Arry数组的元素,通过调用函数getpoint来实现
extern void getpoint(AAA p[3]);
AAA aa[3]={0};
getpoint(aa);
p[i]=Arry[i]; 将结构体数组Arry每个元素的首地址赋值给p,即数组的行地址。即可取得数组里面的值。
0 0
- 怎样在一个.c档里面取引用另一个.c档里面的静态结构体数组
- node.js关于一个js文件引用另一个js文件里面的函数或者数组变量
- 怎样在一个数据库中访问另一个数据库里面的表
- 从一个数组里面取出一个范围之间的数放倒另一个数组里面
- c/C++ 通信协议里面的帧结构
- c语言初步经典题16---将一个文件的内容复制到另一个文件里面
- C里面没有引用么?
- C语言里面结构体初始化
- 对于单片机C里面结构体的认识
- 触发器问题(怎样在一个数据库中的触发器中访问另一个数据库里面的表呢)
- 在一个Activity里面结束另一个Activity
- c语言把一个数组里面的部分值直接复制到另外一个数组
- Java取一个数组里面第二大的数据
- Java取一个数组里面第二大的数
- 在一个Activity里面的TextView上面添加网页链接,启动后到另一个Activity里面!
- 在一个Activity里面的TextView上面添加网页链接,启动后到另一个Activity里面!
- const 在C/C++里面的用途
- 如何在winhex里面将一个文件转成C语言数组存储
- 如何通过Applescript来狂发imessage(最简单的流程)
- spring常用工具类
- (EM算法)The EM Algorithm
- Spring定时器的cronExpression配置说明
- eclipse创建项目报错
- 怎样在一个.c档里面取引用另一个.c档里面的静态结构体数组
- shell kill tomcat 进程 删除 ROOT 启动 tomcat
- appfuse - sitemesh 1
- vim配置(C/C++)
- cocos2dx android和iOS平台的崩溃捕获和收集
- 通过include 加载的layout,在引用改layout的id时出现找不到控件
- 9.3 使用 .NET 接口
- MFC编程中error信息的出现,以及解决方法
- Android NotificationManager 和Notification的使用总结(转)