重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
#includestdio.h
创新互联建站是一家专业提供屏南企业网站建设,专注与成都网站设计、网站建设、H5页面制作、小程序制作等业务。10年已为屏南众多企业、政府机构等服务。创新互联专业的建站公司优惠进行中。
#includestring.h //函数strcpy需要头文件string.h
struct L
{
int num;
//原代码char name; 这只是1个字符
char name[20]; //name[]是字符数组,存放字符串,可以存放19个字符+1个结尾标识0
struct L *next;
};
int main()
{
struct L a,b,c,*head,*p;
a.num=123;
//原代码a.name={yang};
strcpy(a.name,"yang"); //字符串赋值,一般用函数strcpy
b.num=103;
//原代码b.name={yan};
strcpy(b.name,"yan");
c.num=230;
//原代码c.name={yng};
strcpy(c.name,"yng");
head=a;
a.next=b;
b.next=c;
//原代码c,next=NULL;
c.next=NULL;
//P=head; //这个P是大写 实际上变量p是小写
//原代码for(;p=!Null;p=p-next) //Null是拼写错误, =!是拼写错误
for(p=head ; p != NULL ; p=p-next )
{
//printf("%d,%c\n",p-num,p-name); //%c对应1个字符
printf("%d,%s\n",p-num,p-name); //%s对应字符串
printf("\n");
}
return 0;
}
1、什么叫在主函数中定义在主函数之外使用。如果指的是在外函数中作为数据结构引用,那是做不到的,这是C/C++的基本结构决定的,也是基本常识;因为主函数也是函数,在函数中定义的结构体是局部性质,只能在定义它的主函数中可见.如果是主函数调用的某个函数使用,那就把结构体当作实参传给被调函数就行了。
2、但这不叫在外函数中使用,实质是在主函数中使用;而且,被调函数必须要有相同的结构体类型变量来接收,那“相同的结构体类型”,还得在主函数外定义,这实在是得不偿失,用个指针什么都解决了.
1的写法是C++才有的引用,C语言不支持引用。此时ref就是原变量的别名。成员也是用引用名.成员名表示。
2的写法是指针,C和C++都支持指针。结构体指针的成员用指针名-成员名表示。
结构体的定义如下所示,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值的大小将不产生任何效果。
参考资料来源:百度百科-结构体