/*
结构体只有(属性)成员没有方法,类有属性有方法,功能更强大
2016年6月1日13:53:23
*/
# include <stdio.h>
# include <string.h> //strcpy()所用
struct Student //结构体(类也是)是数据类型,而不是定义一个变量,这里没有分配内存
{
int sid;
char name[20]; //c中没有string类型,想给其覆盖赋值需要用strcpy(name, "asdasd")来改,此函数前需加string.h头文件
int sage;
}; //分号一定要有
int main(void)
{
struct Student st = {1000, "zhangsan", 20}; //定义了一个结构体Student类型的变量并赋值,名字为st
printf("%d\n%s\n%d\n", st.sid, st.name, st.sage); //%c输出char类型(1个字符),%s输出char数组!!
st.sid = 1012;
st.sage = 22; //现在想改变结构体中成员的值,前两个都可以
// st.name = "lisi"; //这里出错,原因c中char[]数组不能这样重新赋值!!
printf("%d\n%s\n%d\n", st.sid, st.name, st.sage); //%c输出char类型(1个字符),%s输出char数组字符串!!
strcpy(st.name, "lisi");
printf("%d\n%s\n%d\n", st.sid, st.name, st.sage); //%c输出char类型(1个字符),%s输出char数组!!
return 0;
}
p7_2:
# include <stdio.h>
/*
想修改结构体中成员的值怎么做?第一种方式st.sid点方式一个一个改(一般不用);
第二种方式,指针!!定义结构体类型指针并指向另一结构体,即可用指针访问
* 总结如何使用结构体?--两种方式
* struct Student st = {1000, "zhangsan", 20};
* struct Student *pst = &st;
1. st.sid;
2. pst->sid //pst所指向结构体的sid成员
2016年6月1日13:58:22
*/
struct Student
{
int sid;
char name[20];
int sage;
}; //分号一定不能少
int main(void)
{
Student st = {1000, "zhangsan", 20}; //现在想修改st里成员的值
// st.sid = 96; //第一种方式(舍)
Student *pst; //定义结构体类型指针,指向st
pst = &st;
pst->sid = 99; //记住!! pst->sid等价于(*pst).sid等价于st.sid
printf("sid = %d\n", pst->sid);
return 0;
}
/*
*/
P7_3:
/*
静态变量(结构体也是静态的,只要没用到malloc都是静态的)只要定义了就分配内存,不管其是否进行赋值,不赋值就是个垃圾值而已
2016年6月1日14:02:55
*/
# include <stdio.h>
# include <string.h>
void f(struct Student *pst);
void g(struct Student *pst);
struct Student
{
int sid;
char name[20];
int sage;
}; //分号不能省
int main(void)
{
struct Student st; //也分配了一块内存空间,大小大概208个字节,因此一般用结构体传递形参时一定要用指针,因为指针只有4个字节,而传递结构体则耗时间,耗内存;
//如果没有结构体赋值里面是个垃圾数字。
// int i; //已经分配了内存,只不过现在没有赋值,是个垃圾值
g(&st);
f(&st); //现在f()函数要修改st中的值,通过指针
g(&st); //输出用g()函数来实现
return 0;
}
void f(struct Student *pst) //vc中可以省去struct,而其他编译器不一定,所以最好还是加上
{
pst->sid = 99;
// pst->name = "zhangsan"; //error,char[]数组赋值需要用到strcpy()函数
strcpy(pst->name, "zhangsan"); //ok
(*pst).sage = 22;
}
void g(struct Student *pst)
{
printf("sid = %d\n", pst->sid);
printf("name = %s\n", pst->name);
printf("sage = %d\n", pst->sage);
}