❶ c语言结构体里引用结构体
#include
struct person
{
char name[10];
int num;
};
void main()
{
struct person per[5];
void sort(struct person *, int );
int i;
printf("print letter:\n");
for(i=0;i<5;i++)
{
printf("name: ");
scanf("%s", &per[i].name);
printf("num: ");
scanf("%d", &per[i].num);
}
sort(per, 5);
for(i=0;i<5;i++)
printf("print: %s%d\n", per[i].name, per[i].num);
getch();
}
void sort(struct person *a, int n)
{
int i,j,t;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(a[i].num>a[j].num)
{
t=a[i].num; /*你代码中i写成j,这是细节问题*/
a[i].num=a[j].num;
a[j].num=t;
}
}
你代码有点问题,我给你改了改。TC测试通过。
除了注视的地方,还有几点要注意:
你源代码传送的是per[0].num的地址,记:a[0],但是a[1]的地址不等于
per[1].num的地址。
指针加1的意思你没理解好。
举个列子。
int a[10];
那么*(a+1)的意思是把a地址向后移动sizeof(int)个位。
所以你那个&a[1]指向的还是结构体中的数据。(恩,这里体现了低级语言的特性。每一个内存的每一位都要考虑到。要是你写个程序:200位的浮点数加法计算机,你更能体会到什么叫做考虑到每一位内存,调试的时候要一个内存一个内存的演算。代码我的空间里有,可以自己去看)
不懂的问
❷ C语言结构体数组可以包含不同结构体类型的变量吗
举个例子 struct A // A就是形如这样的结构体的名字 { int a; int b; }; struct B // B就是形如这样的结构体的名字 { char a[10]; }; 两个结构体都是自定义的,所以需要知道使用的是哪个结构体,所以调用这个结构体的时候必须写成struct A,才算是A结构体的类型,因此定义A的变量就写成struct A a; // a是结构体A类型的变量
❸ c语言结构体可以随意嵌套结构体么
c语言结构体可以随意嵌套结构体
但是像这样
struct player {
struct plane1;
struct plane2;
} playerA, playerB, *player; 是错误的。
struct plane{
……
} ;只是定义了一个名为plane的结构体类型。
嵌套结构体应该是这样:
struct player {
struct plane plane1;
struct plane plane2;
} ;
❹ c语言中结构体问题!前一个结构体数组,后一个怎么把它包含在第二个结构体中
改成
int main()
{
OK st;
st.arcs[0].sid=1;
printf("%d",st.arcs[0].sid);
}
adj本身没有在上面定义中出现,所以应该是sid
ST是struct Student 数组形式,要求使用下标代表st的一个元素。
❺ c语言里面的结构体是什么意思
结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合,叫做结构。
在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。
结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问。
(5)c语言结构体包含结构体扩展阅读
将一个结构体变量中的数据传递给另一个函数,有下列3种方法:
(1) 用结构体变量名作参数。一般较少用这种方法。
(2) 用指向结构体变量的指针作实参,将结构体变量的地址传给形参。
(3) 用结构体变量的引用变量作函数参数。
在软件开发过程中,常常需要动态地分配和撤销内存空间,例如对动态链表中结点的插入与删除。C语言中是利用库函数malloc和free来分配和撤销内存空间的。
❻ 【c语言共用体】里面嵌套有结构体,求详解。高分悬赏。谢谢
共用体就是享用同一块内存
在此例中
e的大小为最长元素的大小,也就是结构体out的大小,共两个int,假设此处int为4字节
e.c和e.d和e.out.a占用同一块内存,即低4字节的内存,a.out.b占用高4字节内存
然后e.c=1;e.d=2;
e.c和e.d和e.out.a都为2
e.out.a=e.c*e.d = 2*2 = 4;
那么e.c和e.d和e.out.a都变成了4
e.out.b=e.c+e.d = 4+4 = 8
❼ c语言结构体嵌套问题
struct goods_type{....}; struct goods_type goods; 试试这样写!赋值时最后一个参数day不是date!
❽ C语言中结构体中含结构体指针
void creat(zong &p)
{
p=(zong)malloc(sizeof(struct all));
p->sjiben=(ba)malloc(sizeof(struct basic)); //添加这个,否则sjiben根本不知道指向什么东西啊
p->next=NULL;
}
void set(zong &p)
{
zong q=(all *)malloc(sizeof(struct all));
q->sjiben=(ba)malloc(sizeof(struct basic)); //添加这个,否则sjiben根本不知道指向什么东西啊
zong w=p;
while(w->next!=NULL)
{w=w->next;}
w->next=q;
q->next=NULL;
printf("年龄:");
scanf("%d",&q->sjiben->age);
}
❾ C语言 如何在结构体中给嵌套的结构体赋值
结构体嵌套,赋初值,大括号嵌套就可以了。
问题是你代码写错了。
你定义的old1不是结构类型,而是结构变量。
在shuju中成员要写struct old 变量名;
不能写struct old1。
下面是演示代码:(补充:如果想定义一个结构类型别名,要用typedef)
#include <stdio.h>
struct old
{
int year;
int month;
int day;
}old1={1972, 8, 3};
struct shuju
{
char name[10];
char gender[6];
int height;
struct old old1;
char access[9];
}shuju1={"moumouren","male",175,{2019,6,29},"well"};
int main()
{
printf("结构变量old1的初值: %d %d %d ",old1.year,old1.month,old1.day);
printf("结构变量shuju1中成员old1的初值:%d %d %d ",shuju1.old1.year,shuju1.old1.month,shuju1.old1.day);
printf("我特意起一样的名字,就是告诉你这两个变量是不一样的。 ");
return 0;
}
/*(补充:如果想定义一个结构类型别名,要用
typedef struct old
{
int year;
int month;
int day;
}old1;//这样old1才表示是一个类型,然后再定义该类型变量时,才可以写 old1 变量名;
)*/
❿ C语言结构体定义
C语言结构体定义:struct为结构体关键字,tag为结构体的标志,member-list为结构体成员列表,其必须列出其所有成员;variable-list为此结构体声明的变量。
结构体是C语言中聚合数据类型(aggregatedatatype)的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问。
(10)c语言结构体包含结构体扩展阅读
1、struct是声明结构体类型时必须使用的关键字,不能省略。“结构体”这个词是根据英文单词structure译出的。
2、structSTUDENT是定义的数据类型的名字,它向编译系统声明这是一个“结构体类型”,包括name、num、sex、age、score、addr等不同类型的项。
3、structSTUDENT与系统提供的int、char、float、double等标准类型名一样,都是数据类型,具有同样的作用,都是用来定义变量的。