注意:
一下赋值是不能使用的
但是在结构体中是可以直接进行赋值操作的
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;
}
(完!)