12.11 代码段 稍后做结构体的整理与分享
结构体基础1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct
{
char a[64] ;
int len ;
} s1 ;
struct s2{
char a[64];
int len ;
}; // 结构体的话只能在前面放 ,不能够在后面放的 不然就会报错
struct Person2
{
char name[64];
int age ;
}myPerson3 = {"数额呢",21}; // 可以在结构体后面直接给这个结构体一一个初值,后面直接引用
struct Public
{
char name[11] ;
int age ;
} ;
void text01()
{
s1 myPerson = {"顺",12};
struct s2 myPerson2 = {"树森",32};
myPerson3.age = 100 ;
printf("myPerson3 %d\n",myPerson3.age);
}
void text03()
{
// 在栈区创建一个结构体变量
struct Person2 ss1 = {"树森",1111};
// 在堆区上创建一个结构体变量
struct Person2 * ss2 = malloc(sizeof (struct Person2));
ss2->age = 11 ;
strcpy(ss2->name,"树森"); // 为啥C语言结构体变量只能够用strcpy
}
void text04()
{
// 结构体数组 在栈上创建
struct Person
{
char name[11];
unsigned int age ;
} ;
struct Person persons[] = {
{"树森",13},
{"量子",12},
{"QQQQ",16},
} ;
// 打印这个结构体指针
int i ;
int len = sizeof persons / sizeof(struct Person) ;
for (i=0;i<len;i++)
{
printf("姓名是 %s年龄是 %d\n",persons[i].name,persons[i].age);
}
}
void text05()
{
// 在堆上创建一个结构体指针
struct Public *persons = malloc(sizeof(struct Public)*3) ;
int i ;
for (i=0;i<3;i++)
{
sprintf(persons[i].name,"name_%d",i) ; // sprintf 1要被替换的变量 2 变换的字符串 3字符串中的%s 和%d的映射变量
persons[i].age = i+ 11 ;
}
// 打印出这个结构体指针
for (i=0;i<3;i++)
{
printf("年龄是 %s 现在的年龄是 %d\n",persons->name,persons->age);
printf("年龄是 %s 现在的年龄是 %d\n",persons[i].name,persons[i].age);
printf("%\n");
}
}
int main(void)
{
// text01();
// text04();
text05();
}
结构体基础2
#include <stdio.h>
void text01()
{
// 测试结构体的赋值
struct Person
{
char name[64] ;
int age ;
} ;
struct Person person1 = {"树森",11};
struct Person person2 = {"真撒加快了的",22};
printf("name is %s age is %d\n",person1.name ,person1.age) ;
printf("name is %s age is %d\n",person2.name ,person2.age) ;
person2 = person1 ;
printf("相等之后可以知道:\n") ;
// 由此观之 结构体 是可以直接赋值的 但是要考虑他们的属性是否相同
printf("name is %s age is %d\n",person1.name ,person1.age) ;
printf("name is %s age is %d\n",person2.name ,person2.age) ;
}
int main(void)
{
text01();
}