C语言基础学习之结构体与指针实例
#define _CRT_SECURE_NO_WARNINGS
#include
#include
#include
#include
//结构体是一种构造数据类型
//把不同的数据类型整合起来成为一种自定义的数据类型
/*struct Man
{
char* name;
int age;
};
void main(){
//1.构造方式赋值
struct Man m1 = { "jack", 20 };
//2.赋值
struct Man m2;
m2.age = 30;
m2.name = "tom";
printf("%s,%d\n", m2.name, m2.age);
getchar();
}*/
//结构体的几种写法
/*struct Man
{
char name[20];
int age;
} m1, m2 = { "jack", 20 };
void main(){
//对于char数组的赋值要使用strcpy函数,这个函数是string.h中的
strcpy(m1.name, "tom");
m1.age = 30;
printf("%s,%d \n", m1.name, m2.age);
getchar();
}*/
//匿名结构体
/*struct {
char* name;
int age;
} m1;
void main(){
m1.age = 30;
m1.name = "tom";
printf("%s,%d\n", m1.name, m1.age);
getchar();
}*/
//结构体嵌套
/*struct Teacher{
char* name;
};
struct Student{
char* name;
int age;
//内部嵌套Teacher结构体
struct Teacher t;
};
void main(){
//赋值
struct Student s1 = { "tom", 20, { "jack" } };
//依次输出学生的姓名,年龄,老师姓名
printf("%s,%d,%s\n", s1.name, s1.age, s1.t.name);
getchar();
}*/
//结构体嵌套2
/*struct Student{
char* name;
int age;
struct Teacher{
char *name;
} t;
};
void main(){
//依次赋值
struct Student s1 = { "tom", 20,"rose"};
//依次输出学生的姓名,年龄,老师姓名
printf("%s,%d,%s\n", s1.name, s1.age,s1.t.name);
getchar();
}*/
//结构体和指针
/*struct Student{
char* name;
int age;
};
void main(){
struct Student s1 = { "tom", 16 };
struct Student* p = &s1;
//这三种表示方法相同
printf("%s,%d \n", s1.name, s1.age);
printf("%s,%d \n",(*p).name,(*p).age);
//“->”(箭头)是“(*p).”简写形式
printf("%s,%d \n",p->name,p->age);
getchar();
}*/
//指针数组及其遍历
/*struct Student{
char* name;
int age;
};
void main(){
//结构体数组
struct Student stArr[] = { { "tom", 20 },{"rose",16} };
//遍历
struct Student* p=&stArr;
//第一种遍历
for (; p < stArr+2; p++)
{
printf("%#x\n",p);
printf("%s,%d\n",(*p).name,(*p).age);
printf("%s,%d\n", p->name, p->age);
}
//第二种遍历
int i = 0;
for (; i
//结构体的大小(字节大小)
/*struct Man{
int age;
double weight;
};
void main(){
struct Man m1 = { 20, 89.0 };
//结构体变量的大小,必须是最宽基本数据类型的整数倍
//提升读取的效率
printf("%#x,%d",&m1,sizeof(m1));
getchar();
}*/
//结构体和动态内存分配
/*struct Man{
char* name;
int age;
};
void main(){
//动态分配10个man结构体大小
struct Man* m_p=(struct Man*)malloc(sizeof(struct Man) * 10);
struct Man* p = m_p;
p->name = "rose";
p->age = 16;
p++;
p->name = "jack";
p->age = 20;
//遍历数组
struct Man* loop_mam = m_p;
for (; loop_mam < m_p + 2; loop_mam++){
printf("%s,%d \n", loop_mam->name, loop_mam->age);
}
//释放指针
free(m_p);
getchar();
}*/
//typedef 类型取别名
//1.不同名称代表在干不同的事情typedef int jint;
//2.不同情况下,使用不同的别名
//#if defined(__cplusplus)
//typedef _JNIEnv JNIEnv;
//typedef _JavaVM JavaVM;
//3.书写简洁
//给类型取别名
//Age是int的别名
/*typedef int Age;
//Ap是int类型指针的别名
typedef int* Ap;
struct Man{
char* name;
int age;
};
/