1、每次使用结构体的时候都要struct _Person ,比如struct _Person p1={0};sizeof(struct _Person ); 太麻烦。
2、typedef int zhengshu;可以给int取一个别名zhengshu。
因此也可以用typedef struct _Person Person;把Person定义为struct _Person 的别名
3、当然最常用的简化写法:
typedef struct _Person
{
int age;
char* name;
} Person;
4、结构体的赋值
Person p1={0};
p1.name = "全智贤";
p1.age=30;
Person p2 = p1;
printf("%d,%d\n",&p1,&p2);
printf("%s的年龄是%d\n",p1.name,p1.age);
p1和p2的地址不一样,结构体赋值是“复制一份”
5、为了避免内存占用,一般只用一份,因此通过结构体指针传递:
Person *p2 = &p1;
printf("%s的年龄是%d\n",p2->name,p2->age);
6、注意:对于结构体指针,取成员要使用->,而不是“.”
本节代码:
20ptrStructHowToCopy.c
#include <stdio.h>
#include <string.h>
/****************************************************************/
/* */
/* 本程序主要介绍结构体的别名和结构体的不同拷贝赋值方法及区别 */
/* */
/****************************************************************/
/*
//普通定义结构体的方法1
struct _Person
{
char *name; //指针,就是int大小 4个字节,保存的是指向字符串的指针
int age; //int大小 4个字节
double height; //double大小 8个字节
};
*/
//typedef struct _Person Person;
//定义的时候就为其取好别名,方法2
typedef struct _Person
{
char *name; //指针,就是int大小 4个字节,保存的是指向字符串的指针
int age; //int大小 4个字节
double height; //double大小 8个字节
} Person;
int main(int argc, char *argv[])
{
struct _Person p1 = {0};//这样定义的话,里面的内容会是乱七八糟的数据
p1.name = "全智贤";
p1.age = 30;
p1.height = 170;
printf("%s,%d岁\n",p1.name,p1.age);
printf("%d\n",sizeof(struct _Person));
/*
Person p2 = {0};
p2.name = "如鹏网";
p2.age = 6;
p2.height = 1190;
*/
Person p2 = p1;
p1.age = 300;
printf("%s,%d岁\n",p2.name,p2.age);
printf("%d\n",sizeof(Person));
printf("%d,%d :p1与p2内存地址不同\n",&p1,&p2); //两者地址不同,创建一个p2,完全复制p1的内容
//修改p1的内容,不影响p2的值,即是做的数据的复制
Person* p3 = &p1;
p1.age = 305;
printf("%d,%d :p1与p3内存地址相同\n",&p1,p3); //两者地址相同,创建一个p3位指针类型,将p1的地址给了p3
//修改p1的内容,p3的值也即随之改变
printf("%s,%d岁\n",p3->name,p3->age); //指针的引用需要更改为'->'符号
return 0;
}
---------- 运行 ----------
全智贤,30岁
16
全智贤,30岁
16
2686712,2686696 :p1与p2内存地址不同
2686712,2686712 :p1与p3内存地址相同
全智贤,305岁
输出完成 (耗时 0 秒) - 正常终止