• 时间不是很充裕就只摆示范代码和注释了
  • 看完这些样例代码就能理解透彻了
#include<stdio.h>
#include<string.h>

//结构体、指针、别名组合在一起容易记混,下面给出常见几种组合
//要区分清楚的关键在于理解声明变量的语法是   变量类型(int、struct struct_name、int*,类型后面带*代表是该类型的指针变量)  变量名字 =值;  例如   int a = 1;意思是把变量a赋值为1  int是变量类型(要定义自己的类型用结构体)  a是变量名字(自己取的) =代表赋值操作 1是值  ;是代表这一个语句结束 
//理解清楚结构体的基本格式
/*
定义一个结构体,结构体名字为user,两个成员变量  
struct user{
	char username[20];
	char password[20];
};
使用这个结构体声明一个结构体变量
struct user xiaoming;
struct user xiaoming={"xiaoming","123456"};
修改(由于是长度不相同的两个字符数组,用strcpy方便点,如果是数字等直接 xiaoming.age=18;) 
strcpy(xiaoming.username,"xiaoming_modified") 
*/ 
/*
定义一个结构体,结构体名字为user,两个成员变量 ,声明了一个结构体变量,名字叫xiaoming 
struct user{
	char username[20];
	char password[20];
}xiaoming;
*/ 
/*
定义一个结构体,结构体名字为user,两个成员变量 ,声明了一个结构体变量,名字叫xiaoming并赋值了 
struct user{
	char username[20];
	char password[20];
}xiaoming={"xiaoming","123456"};
*/ 
/*
定义一个结构体,结构体名字为user,两个成员变量 ,声明了一个结构体变量,名字叫xiaoming并赋值了 ,另外定义了一个结构体指针变量 
struct user{
	char username[20];
	char password[20];
}xiaoming={"xiaoming","123456"},*p;
p=&xiaoming;//这样p就指向了xiaoming这个变量,指针变量可以理解为是一个可以用来指向变量的变量 
strcpy(p->username ,"xiaoming_modified");//使用指针变量操作被指向变量的数据时使用箭头->,而结构体变量时使用点. 
 
*/ 
/*
typedef struct {
	char username[20];
	char password[20];
} user;
*/ 
struct user{
	char username[20];
	char password[20];
}xiaoming={"xiaoming","123456"},*p;

void new_line(){
	//打印使用printf函数,%d输出整数  %s输出字符串  %c 输出字符  %p打印内存地址   %x输出16进制数字   %o输出8进制   如果使用的输出格式定义没定义对有可能造成没有输出
	printf("\n");//打印个换行 
}



int main(){
	p=&xiaoming;
	strcpy(p->username ,"xiaoming_modified");
	printf("%s",xiaoming.username);
	return 0;
} 
#include<stdio.h>
#include<string.h>

//定义一个结构体并创建一个结构体变量 

/*结构体语法  []代表可选 
struct [结构体名字] {
	[结构体成员类型]  [结构体成员名字][=结构体成员的值];
}[结构体变量]; 

例如
struct user{
	char username[20];
	char password[20];
};
可以预先赋值 
struct user{
	char username[20]="xiaoming";
	char password[20];
};
可以预先声明结构体变量 
struct user{
	char username[20];
	char password[20];
}xiaoming;
可以预先声明结构体变量并且赋初值 
struct user{
	char username[20];
	char password[20];
}xiaoming={"xiaoming","123456"};

访问成员变量时用点和箭头的区别
 .     类型为结构体变量使用          struct user xiaoming;strcpy(xiaoming.username,"xiaoming");
 ->    类型为结构体指针变量时使用  struct user *xiaoming;strcpy(xiaoming->username,"xiaoming");
*/
struct user{
	char username[20];
	char password[20];
};

void new_line(){
	//打印使用printf函数,%d输出整数  %s输出字符串  %c 输出字符  %p打印内存地址   %x输出16进制数字   %o输出8进制   如果使用的输出格式定义没定义对有可能造成没有输出
	printf("\n");//打印个换行 
}
void print_user(struct user u){
	//打印User结构体 
	printf("struct user {");
	new_line();
	printf("    username:\"%s\",",u.username);
	new_line();
	printf("    password:\"%s\"",u.password);
	new_line();
	printf("    }");
	new_line();
}
int main(){
	//定义一个结构体变量  struct user 变量名; 
	struct user xiaoming;
	//	xiaoming.username="xiaoming";//这样是不行的,因为username那边是20个字符,这边不足,要么补\0 要么用strcpy 
	strcpy(xiaoming.username,"xiaoming");
	strcpy(xiaoming.password,"123456");
	print_user(xiaoming);
	return 0;
} 
#include<stdio.h>
#include<string.h>

//定义一个结构体并在定义时就声明一个结构体变量并且赋值 

// 声明后不赋值写法,后面再自己赋值也可以 
// struct user{
//	char username[20];
//	char password[20];
//}xiaoming;

struct user{
	char username[20];
	char password[20];
}xiaoming={"xiaoming","123456"};

void new_line(){
	//打印使用printf函数,%d输出整数  %s输出字符串  %c 输出字符  %p打印内存地址   %x输出16进制数字   %o输出8进制   如果使用的输出格式定义没定义对有可能造成没有输出
	printf("\n");//打印个换行 
}
void print_user(struct user u){
	//打印User结构体 
	printf("struct user {");
	new_line();
	printf("    username:\"%s\",",u.username);
	new_line();
	printf("    password:\"%s\"",u.password);
	new_line();
	printf("    }");
	new_line();
}
int main(){
	print_user(xiaoming);
	return 0;
} 
#include<stdio.h>
#include<string.h>

//定义一个结构体并在定义时就创建一个结构体变量并赋初值,然后使用这个进行复制 



struct user{
	char username[20];
	char password[20];
}xiaoming={"xiaoming","123456"};

void new_line(){
	//打印使用printf函数,%d输出整数  %s输出字符串  %c 输出字符  %p打印内存地址   %x输出16进制数字   %o输出8进制   如果使用的输出格式定义没定义对有可能造成没有输出
	printf("\n");//打印个换行 
}
void print_user(struct user u){
	//打印User结构体 
	printf("struct user {");
	new_line();
	printf("    username:\"%s\",",u.username);
	new_line();
	printf("    password:\"%s\"",u.password);
	new_line();
	printf("    }");
	new_line();
}
int main(){
	struct user libai=xiaoming;
	strcpy(xiaoming.username,"x");
	print_user(libai);
	print_user(xiaoming);
	return 0;
} 
#include<stdio.h>
#include<string.h>

//定义一个结构体并取别名(其实也就是定义一个新的类型) 

/*
首先了解一下typedef命令
 typedef int number;
 上面命令给int取了个别名叫number,或者理解为顶一个了一个新的类型,这个类型名字是number,类型是int ,到后面类型是某个结构体,就是定义了一个新的类型 
*/ 

typedef struct {
	char username[20];
	char password[20];
}user;

void new_line(){
	//打印使用printf函数,%d输出整数  %s输出字符串  %c 输出字符  %p打印内存地址   %x输出16进制数字   %o输出8进制   如果使用的输出格式定义没定义对有可能造成没有输出
	printf("\n");//打印个换行 
}

void print_user(user u){
	//打印User结构体 
	printf("struct user {");
	new_line();
	printf("    username:\"%s\",",u.username);
	new_line();
	printf("    password:\"%s\"",u.password);
	new_line();
	printf("    }");
	new_line();
}
int main(){
	//使用别名user来创建结构体变量 
	user xiaoming;
	strcpy(xiaoming.username,"xiaoming");
	strcpy(xiaoming.password,"123456");
	print_user(xiaoming); 
	return 0;
} 
#include<stdio.h>
#include<string.h>

//定义一个结构体并使用结构体指针 


struct user {
	char username[20];
	char password[20];
};

void new_line(){
	//打印使用printf函数,%d输出整数  %s输出字符串  %c 输出字符  %p打印内存地址   %x输出16进制数字   %o输出8进制   如果使用的输出格式定义没定义对有可能造成没有输出
	printf("\n");//打印个换行 
}
void print_user(struct user u){
	//打印User结构体 
	printf("struct user {");
	new_line();
	printf("    username:\"%s\",",u.username);
	new_line();
	printf("    password:\"%s\"",u.password);
	new_line();
	printf("    }");
	new_line();
}

void print_user(struct user *u){
	//打印User结构体 
	printf("struct *user {");
	new_line();
	printf("    username:\"%s\",",u->username);
	new_line();
	printf("    password:\"%s\"",u->password);
	new_line();
	printf("    }");
	new_line();
}
int main(){
	struct user  xiaoming;//创建一个结构体变量 
	strcpy(xiaoming.username,"xiaoming");
	strcpy(xiaoming.password,"123456");
	print_user(xiaoming); 
	
	struct user *u=&xiaoming;//创建一个结构体指针变量指向xiaoming, 
	strcpy(u->username,"u");//使用指针变量去改变值 
	print_user(u); 
	print_user(xiaoming); //被指向的xiaoming的值也被改变了 
	return 0;
}