- 时间不是很充裕就只摆示范代码和注释了
- 看完这些样例代码就能理解透彻了
#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;
}