江南才子 发表于 2021-7-6 18:33:44

C语言结构体、结构体指针、结构体别名(多种代码、注释示范)

  

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

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

*/
/*
typedef struct {
char username;
char password;
} user;
*/
struct user{
char username;
char password;
}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;
char password;
};
可以预先赋值
struct user{
char username="xiaoming";
char password;
};
可以预先声明结构体变量
struct user{
char username;
char password;
}xiaoming;
可以预先声明结构体变量并且赋初值
struct user{
char username;
char password;
}xiaoming={"xiaoming","123456"};

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

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;
//char password;
//}xiaoming;

struct user{
char username;
char password;
}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;
char password;
}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;
char password;
}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;
char password;
};

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 userxiaoming;//创建一个结构体变量
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;
}

  

  
文档来源:51CTO技术博客https://blog.51cto.com/humorchen/2993540
页: [1]
查看完整版本: C语言结构体、结构体指针、结构体别名(多种代码、注释示范)