重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
首先,定义一个结构的一般形式为:
在乾安等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供网站设计、成都做网站 网站设计制作按需定制开发,公司网站建设,企业网站建设,品牌网站设计,成都营销网站建设,成都外贸网站制作,乾安网站建设费用合理。
struct结构名
{
//成员表列
};
成员表由若干个成员组成, 每个成员都是该结构的一个组成部分。对每个成员也必须作类型说明,其形式为:“类型说明符 成员名;”。成员名的命名应符合标识符的书写规定。例如:
struct stu
{
int num;
char name[20];
char sex;
float score;
};
在这个结构定义中,结构名为stu,该结构由4个成员组成。 第一个成员为num,整型变量;第二个成员为name,字符型数组;第三个成员为sex,字符型变量;第四个成员为score,浮点型变量。 应注意在括号后的分号是必不可少的。
然后,当结构定义完成后,即创建了一种数据类型,可以像int、float等内置类型一样使用,以上面定义的stu结构体来和int类型对比着看。
int a;//定义一个int类型的变量a
stu a; //定义一个stu类型的变量a
int *p; //定义一个int类型的指针p
stu *p; //定义一个stu类型的指针p
int a[10];//定义一个int类型的数组a,它有10个元素,每个元素是int类型
stu a[10];//定义一个stu类型的数组a,它有10个元素,每个元素是stu类型。
可以在外部定义结构体类型,然后在主函数内部定义该类型的变量。在输入输出函数调用时,以结构体变量指针做为参数传递。
参考代码如下:
#include stdio.h
struct test
{
int a;
};//定义结构体类型struct test。
void input(struct test* p)//输入函数,以指针作为参数。
{
scanf("%d",p-a);
}
void output(struct test *p)//输出函数,以指针作为参数。这里也可以以结构体变量作为参数,不过用指针效率更高。
{
printf("%d\n", p-a);
}
int main()
{
struct test v;//定义结构体变量v。
input(v);//输入。
output(v);//输出。
return 0;
}
1、什么叫在主函数中定义在主函数之外使用。如果指的是在外函数中作为数据结构引用,那是做不到的,这是C/C++的基本结构决定的,也是基本常识;因为主函数也是函数,在函数中定义的结构体是局部性质,只能在定义它的主函数中可见.如果是主函数调用的某个函数使用,那就把结构体当作实参传给被调函数就行了。
2、但这不叫在外函数中使用,实质是在主函数中使用;而且,被调函数必须要有相同的结构体类型变量来接收,那“相同的结构体类型”,还得在主函数外定义,这实在是得不偿失,用个指针什么都解决了.
结构体的定义如下所示,struct为结构体关键字,tag为结构体的标志,member-list为结构体成员列表,其必须列出其所有成员;variable-list为此结构体声明的变量。在一般情况下,tag、member-list、variable-list这3部分至少要出现2个。
结构体的成员可以包含其他结构体,也可以包含指向自己结构体类型的指针,而通常这种指针的应用是为了实现一些更高级的数据结构如链表和树等。如果两个结构体互相包含,则需要对其中一个结构体进行不完整声明。
扩展资料:
一、结构体作用:
结构体和其他类型基础数据类型一样,例如int类型,char类型,只不过结构体可以做成你想要的数据类型,以方便日后的使用。
在实际项目中,结构体是大量存在的,研发人员常使用结构体来封装一些属性来组成新的类型。由于C语言内部程序比较简单,研发人员通常使用结构体创造新的“属性”,其目的是简化运算。
结构体在函数中的作用不是简便,其最主要的作用就是封装。封装的好处就是可以再次利用。让使用者不必关心这个是什么,只要根据定义使用就可以了。
二、结构体的大小与内存对齐:
结构体的大小不是结构体元素单纯相加就行的,因为我们主流的计算机使用的都是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值的大小将不产生任何效果。
参考资料来源:百度百科-结构体
#includestdio.h
#define N 5
struct st{
int id;
char name[30];
char sex[5];
int x;
int y;
int z;
}s[N];
void input()
{
for(int i=0;iN;i++)
scanf("%d%s%s%d%d%d",s[i].id,s[i].name,s[i].sex,s[i].x,s[i].y,s[i].z);
}
void print()
{
for(int i=0;iN;i++)
printf("%d %s %s %d %d %d\n",s[i].id,s[i].name,s[i].sex,s[i].x,s[i].y,s[i].z);
}
main()
{
input();//调用输入函数
print();//调用输出函数
}