内容简介:结构体是一种构造数据类型,就是把不同的数据类型整合起来成为一个自定义的数据类型struct [结构体类型] [结构体变量名] = {[结构体内参数实例化值]struct [结构体类型] [结构体变量名] ;
结构体是一种构造数据类型,就是把不同的数据类型整合起来成为一个自定义的数据类型
二、初始化结构体的变量
1. 第一种初始化方式
struct [结构体类型] [结构体变量名] = {[结构体内参数实例化值]
2. 第二种初始化方式
struct [结构体类型] [结构体变量名] ;
[结构体变量名].[结构体参数名] = [实例化值];
例如:
struct Man
{
char name[20];
int age;
char* mobile;
};
void main() {
struct Man m1 = { "Jack",20 ,"18800008888"};
printf("%s,%d,%s\n", m1.name, m1.age,m1.mobile);
//或
struct Man m2 ;
//m2.name 数组类型不能直接复制
strcpy(m2.name, "Rose");
m2.age = 23;
m2.mobile = "16600001111";
printf("%s,%d,%s\n", m2.name, m2.age,m2.mobile);
getchar();
}
输出:
Jack,20,18800008888 Rose,23,16600001111
三、结构体的几种写法
1、第一种写法
例如:
struct Man{
char name[20];
int age;
};
void main() {
struct Man m1 = { "Jack",20};
printf("%s,%d\n", m1.name, m1.age);
getchar();
}
2、第二种写法,可以在结构体类型的}后,定义结构体变量名,也可以对结构体变量名进行初始化。
例如:
struct Man {
char* name;
int age;
} Man,m2={"jack",20};
void main() {
Man.name = "Tom";
Man.age = 19;
printf("%s,%d\n", Man.name,Man
.age);
getchar();
}
3、第三种写法:匿名结构体,控制结构体变量的个数(限量版),相当于单例
例如:
struct {
char* name;
int age;
} Woman;
void main() {
Woman.name = "Lili";
Woman.age = 19;
printf("%s,%d\n", Woman.name,Woman
.age);
getchar();
}
四、结构体嵌套
结构体是可以进行嵌套使用的,可以分别定义使用,或者在一个结构体中定义另一个结构体
1、分别定义结构体嵌套
例如:
// 老师的结构体
struct Teacher {
char name[20];
};
// 学生的结构体
struct Student {
char name[20];
int age;
struct Teacher t;
};
void main() {
struct Student s1 = { "jack",21,{"Jason"} };
struct Student s2;
strcpy(s2.name, "Tom");
s2.age = 23;
strcpy(s2.t.name, "Jason");
getchar();
}
2、结构体内定义结构体嵌套
例如:
// 学生的结构体
struct Student {
char name[20];
int age;
// 老师的结构体
struct Teacher {
char name[20];
} t;
};
void main() {
struct Student s1 = { "jack",21,{"Jason"} };
struct Student s2;
strcpy(s2.name, "Tom");
s2.age = 23;
strcpy(s2.t.name, "Jason");
getchar();
}
五、结构体与指针
结构体变量也可以使用指针进行操作,”p->”是”(*p).”的简写形式
例如:
struct Man{
char name[20];
int age;
};
void main(){
struct Man m1 = {"Jack",30};
//结构体指针
struct Man *p = &m1;
printf("%s,%d\n",(*p).name,(*p).age);
//"p->"是"(*p)."的简写形式
printf("%s,%d\n",p->name,p->age);
getchar();
}
六、结构体数组与指针
结构体变量也可以使用指针进行操作,”p->”是”(*p).”的简写形式
例如:
struct Man {
char name[20];
int age;
};
void main() {
struct Man mans[] = { {"Jack",30},{"Rose",19} };
//遍历数组
struct Man *p = mans;
for (; p < mans + 2; p++) {
printf("%s,%d\n", p->name, p->age);
}
int i = 0;
for (; i < sizeof(mans) / sizeof(struct Man); i++) {
printf("%s,%d\n", mans[i].name, mans[i].age);
}
getchar();
}
七、结构体的大小(字节对齐)
结构体的大小必须是结构体中最宽基本数据类型的整数倍
牺牲一定的存储空间(本需要12字节的空间,实际分配16字节,(最宽基本数据类型的整数倍)),提升读取的效率
例如:
struct Man {
int age;
double weight;
};
void main() {
struct Man m1 = { 20,80.9 };
printf("%#x,%d\n", &m1,sizeof(m1));
getchar();
}
输出:
0xcffcc4,16
八、结构体与动态内存分配
struct Man{
char *name;
int age;
};
void main(){
struct Man *man_p = (struct Man*)malloc(sizeof(struct Man)*10);
struct Man *p = man_p;
//赋值
p->name = "Jack";
p->age = 20;
p++;
p->name = "Rose";
p->age = 23;
struct Man *loop_p =man_p ;
for(;loop_p < man_p+2;loop_p++){
printf("%s,%d\n",loop_p->name,loop_p->age);
}
free(man_p);
getchar();
}
九、typedef 类型取别名
1、不同的名称代表在干不同的事情;typedef int jint;
2、不同的情况下,使用不同的别名
if(_cplusplus){
typedef _JNIEvn JNIEvn;
typedef _JavaVM JavaVM;
}
3、书写简洁
struct Man{
char *name;
int age;
};
//Age int 类型的别名
typedef int Age;
//Ap int 类型指针的别名
typedef int* Ap;
typedef struct Man JavaMan;
typedef struct Man* JM;
//简写
typedef struct Woman{
char name[20];
int age;
} W,*WP;// W 是Woman结构体的别名;WP 是Woman结构体指针的别名。
void main(){
int i = 5;
Ap p = &i;
//结构体变量
W w1 = {"Rose",25};
//结构体指针
WP wp1 = &w1;
printf("%s,%d\n",wp1->name,wp1->age);
getchar();
}
十、结构体函数指针成员
#include <Windows.h> //Girl 结构体类似于 Java 中的类,name和age类似于属性,sayHi类似于方法 struct Girl{ char *name; int age; //函数指针 void(*sayHi) (char*); }; void sayHi(char* text){ MessageBoxA(0,text,"title",0); } void main(){ struct Girl g1; g1.name = "Lucy"; g1.age = 18; g1.sayHi = sayHi; g1.sayHi("Hello!"); getchar(); }
取别名的写法
#include <Windows.h>
//Girl 结构体类似于Java中的类,name和age类似于属性,sayHi类似于方法
typedef struct Girl{
char *name;
int age;
//函数指针
void(*sayHi) (char*);
}Girl;
//Girl结构体指针取别名
typedef Girl* GirlP;
void sayHi(char* text){
MessageBoxA(0,text,"title",0);
}
void main(){
struct Girl g1 = {"Lucy",19,sayHi};
GirlP gp1 = &g1;
gp1->sayHi("Hello");
getchar();
}
以上所述就是小编给大家介绍的《(四)C语言之结构体》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
社交电商
[美] Stephan Spencer(斯蒂芬.斯宾塞)、[美] Jimmy Harding(吉米.哈丁)、[美] Jennifer Sheahan(詹尼弗.希汉) / 谭磊 / 电子工业出版社 / 2015-3 / 69.00元
你想要在互联网上赚钱吗?想要做好电子商务吗?那么你一定不能忽视社交媒体的力量。不管你想要营销的是实物商品、电子类产品还是本地的服务,这本书会教你怎么做。 《社交电商》全面介绍形形色色的社交媒体以及如何利用这些社交媒体来为你的企业做好服务。如果你经营得不好,在社交媒体上散发出的只是噪声而不是真正的信息。 而如果做得好,社交媒体会成为你最有效的营销工具,帮助你赢得老客户的拥戴,获得新的客户。 ......一起来看看 《社交电商》 这本书的介绍吧!