结构体数组作为函数参数传递(结构数组名作函数参数,地址传递)
结构体成员为数组,函数调用时是什么传递
如果函数的参数是结构体变量
那么一样是传值调用
整个结构体是一个整体
如果是结构体数组 或者结构体指针 那么是传指针调用。
结构体数组怎么传入函数中
Distance_Msg(pw,pl,Distance_Msg_data[0]); 改为:
Distance_Msg(pw,pl,Distance_Msg_data);
结构体数组如何作为参数传递给函数形参?
给你写了一个例子,用的是C++,在VC6.0编译通过
#includeiostream
using
namespace
std;
struct
example
{
int
a;
char
b;
};
void
deal(example
*flag)
{
char
ch='A';
for(int
i=0;i10;i++)
{
flag[i].a=i;
flag[i].b=ch++;
cout"第"i+1"组:a是"flag[i].a",b是"flag[i].bendl; }
}
void
main()
{
example
temp[10];
deal(temp);
}
可以参照一下,解决结构体数组作为参数传递。
如何把结构体数组作为实参传递给函数?
数组传给指针,实质上是不可能的,本质上传的是数组首地址,根据偏移来操作数组,这样看起来好像是真在操作数组一样。另外你程序报错是因为输入没有加“”。
void repeat(city *la,char name,int x,int y)
改为:
void repeat(city *la,char * name,int x,int y)
因为char name[10]是数组,而函数的参数为字符,所以调用失败。
结构体数组传给指针,实质上是不可能的,本质上传的是数组首地址,根据偏移来操作数组,这样看起来好像是真在操作数组一样。就和普通指针一样使用,只不过它是结构体数组。
扩展资料:
结构体的大小不是结构体元素单纯相加就行的,因为我们主流的计算机使用的都是32bit字长的CPU,对这类型的CPU取4个字节的数要比取一个字节要高效,也更方便。所以在结构体中每个成员的首地址都是4的整数倍的话,取数据元素时就会相对更高效,这就是内存对齐的由来。
每个特定平台上的编译器都有自己的默认“对齐系数”(也叫对齐模数)。程序员可以通过预编译命令#pragma pack(n),n=1,2,4,8,16来改变这一系数,其中的n就是你要指定的“对齐系数”。
规则:
1、数据成员对齐规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员的对齐按照#pragma pack指定的数值和这个数据成员自身长度中,比较小的那个进行。
2、结构(或联合)的整体对齐规则:在数据成员完成各自对齐之后,结构(或联合)本身也要进行对齐,对齐将按照#pragma pack指定的数值和结构(或联合)最大数据成员长度中,比较小的那个进行。
3、结合1、2可推断:当#pragma pack的n值等于或超过所有数据成员长度的时候,这个n值的大小将不产生任何效果。
参考资料来源:百度百科-结构体
结构体数组怎么做函数参数
括号中加入STUDENT gh[]
首先要在主函数前定义void Label(STUDENT *[])但在STUDENT 定义之后
引用时Label(student) student本身就是地址 这是数组和结构体的性质
此时引用的是首地址,可在引用后对地址进行j=0循环加1到下一个结构体进行操作,如gh[j]
关于c语言中的结构体数组作为函数参数传递的
1、结构体数组传给指针,实质上是不可能的,本质上传的是数组首地址,根据偏移来操作数组,这样看起来好像是真在操作数组一样。就和普通指针一样使用,只不过它是结构体数组。
2、例程:
typedef?struct?Student
{
????char?name[10]?;
????int?age?;
}Student;
#define?LEN?10?
//print?all?Student?infomation
void?fun(Student?*pStu,int?len)
{
????int?i?;?
????for(i?=?0?;i??len?;++i)
????{
????????printf("%s\t%d",pStu[i].name,pStu[i].age)?;
????}
}
int?main?()
{
????Student?stu[LEN]?;
????fun(stu,LEN)?;
????
}