注意: 一下赋值是不能使用的 但是在结构体中是可以直接进行赋值操作的 st[1] = st[2]; printf(“姓名 = %s, 年龄 = %d, 班级 = %s, 成绩 = %d\n”,st[1].name,st[1].age,st[1].classes,st[1].score);
结构体使可以进行互相赋值的 struct A a1 = { “hello” }; struct A a2 = {“c”}; a2 = a1;
#include<stdio.h> struct E { char a1 : 1; //定义一个char类型 位字段实现 char a2 : 1; char a3 : 1; char a4 : 1; char a5 : 1; char a6 : 1; char a7 : 1; char a8 : 1; }; struct F { int i : 2; char c : 2; // char c : 10;不能超过8bit数据, }; struct student { char name[16]; //姓名 unsigned char age; //年龄 char classes[100]; //班级 unsigned char score; //分数 }; struct A { char array[10]; }; int main() { printf("%d\n", sizeof(struct F)); struct student st[5] = { {"周",50,"java",90},{ "翟",25,"C++",97 } ,{ "催",25,"python",92 } }; int i; for (i = 0; i < 3; i++) { printf("姓名=%s, 年龄=%d, 班级=%s, 成绩=%d\n", st[i].name, st[i].age, st[i].classes, st[i].score); } printf("------------------------------------------------"); printf("\n"); st[1] = st[2]; printf("姓名 = %s, 年龄 = %d, 班级 = %s, 成绩 = %d\n", st[1].name, st[1].age, st[1].classes, st[1].score); struct A a1 = { "hello" }; struct A a2 = {"c"}; a2 = a1; system("pause"); return 0; }使用结构体交换数据所在的地址
#include<stdio.h> struct E { char a1 : 1; //定义一个char类型 位字段实现 char a2 : 1; char a3 : 1; char a4 : 1; char a5 : 1; char a6 : 1; char a7 : 1; char a8 : 1; }; struct F { int i : 2; char c : 2; // char c : 10;不能超过8bit数据, }; struct student { char name[16]; //姓名 unsigned char age; //年龄 char classes[100]; //班级 unsigned char score; //分数 }; struct A { char array[10]; }; void swap(struct student *a, struct student *b) { struct student tmp = *a; *a = *b; *b = tmp; } int main() { struct student st[3] = { { "周",50,"java",90 },{ "翟",25,"C++",97 } ,{ "催",25,"python",92 } }; int i; int j; for (i = 0; i < 3; i++) { for (j = 1; j < 3 - i; j++) { if (st[j].age < st[j - 1].age) { swap(&st[j], &st[j - 1]); } } } for (i = 0; i < 3; i++) { printf("姓名=%s, 年龄=%d, 班级=%s, 成绩=%d\n", st[i].name, st[i].age, st[i].classes, st[i].score); } system("pause"); return 0; }这里补充一个知识点 首先用malloc申请一块地址 char *p = malloc(10); char *array = p; p ++; free§; 这里如果释放的是p,由于p的值是从第二个开始的, 然后往后数10个,那么有一个问题就是,少释放一个应该释放的,而多释放了一个没有使用的。 因为p的地址往后移动了一个,但是,使用array的话,就没有这样的问题了,因为,使用char a8rray = p;但是地址还是从第一个开始的,因此释放的时候应该使用的是释放arra有,如果想使用free§;那么应当先将p的地址指向初始位置,这样的话就不会出现释放出现问题的情况呢。
这里在补充一个
#include<stdio.h> #include<string.h> #pragma warning(disable:4996) //注意这一句的使用,可以解决C语言中出现的一些兼容性问题 struct C { char name[100]; int age; }; int main() { struct C stu; stu.age = 20; strcpy(stu.name, "刘德华"); printf("%s,%d\n",stu.name,stu.age); system("pause"); return 0; }从上面的代码可以看出,就是使用struct定义了一个结构体类型,然后里面放的有姓名和年龄。 然后又使用了一个strcmp进行赋值操作 这里再说一种情况,假设我使用的是指针,那么该如何操作了。 这个我们也容易理解,对于一个指针变量,一般是指向NULL。 那到底是为什么? 因为指针指向了null,也就是没有分配地址空间,那么在使用strcpy(stu1.name1, “刘德华”);的时候,当然不可以,不能进行赋值操作,毕竟连空间都没有开辟,肯定写不进去。 于是我们需要进行一个空间开辟,使得其可以接收写入的值(这里指的是开辟空间地址); 最后注意释放内存 完整代码:
struct D { char *name1; int age1; }; int main() { struct D stu1 = { NULL,0 }; stu1.age1 = 20; stu1.name1 = malloc(100); strcpy(stu1.name1, "刘德华"); printf("%s,%d\n", stu1.name1, stu1.age1); free(stu1.name1); system("pause"); return 0; }(完!)