#include <stdio.h>
#include <stdlib.h>
#include <string>
typedef struct DATA { //数据结构体
char name[32];
int age;
int id;
}Data;
void setName(Data* data,const char* name) {strcpy_s(data->name, name);} //声明操作结构
void setAge(Data* data, int age) {data->age = age;} //体的函数
void setId(Data* data, int id) {data->id = id;} //设置id的函数
char* getName(Data* data) { return data->name; } //获取name的函数
int getAge(Data* data) { return data->age; } //获取age的函数
int getId(Data* data) { return data->id; } //获取id的函数
typedef struct NODE { //数据域指针
Data *data;
void (*setName)(Data* data, const char* name); //操作该结构体的函数
void (*setAge)(Data* data, int age);
void (*setId)(Data* data, int id);
char* (*getName)(Data* data);
int (*getAge)(Data* data);
int (*getId)(Data* data);
struct NODE* next; //指向下一个节点的指针
}Node;
Node* Bind(Node* node) { //绑定结构体
node->setName = &setName;
node->setAge = &setAge;
node->setId = &setId;
node->getName = &getName;
node->getAge = &getAge;
node->getId = &getId;
return node;
}
Node* CreateHeadNode() {
Node* head = (Node*)malloc(sizeof(Node));
if (head == NULL) {
printf("head malloc error\n");
exit(0);
}
head->next = NULL;
head=Bind(head);
return head;
}
int CreateNode(Node*head) {
Node* node = (Node*)malloc(sizeof(Node));
if (!node) {
printf("node Malloc Error\n");
return -1;
}
node->data = (Data*)malloc(sizeof(Data));
if (node->data == NULL) {
printf("data Malloc Error\n");
return -1;
}
node=Bind(node); //绑定结构体
node->setName(node->data, "ManSui"); //测试
node->setAge(node->data, 23); //
node->setId(node->data, 1); //
if (head->next == NULL) {
head->next = node;
node->next = NULL;
}
else {
Node* head_next = head->next;
node->next = head_next;
head->next = node;
}
}
void Print(Node* Head) {
if (Head->next == NULL) {
printf("No Data\n");
return;
}
Node* pMove = Head->next;
while (pMove) {
printf(
"%s\t%d\t%d\n",
pMove->getName(pMove->data),
pMove->getAge(pMove->data),
pMove->getId(pMove->data)
);
pMove++;
}
}
int main() {
Node* head = CreateHeadNode();
CreateNode(head);
Print(head);
return 0;
}
结构体没有访问权限的约束,不能像类一样封装。
结构体里面的所有数据在外部都可以访问。
上面的代码纯属练练手哈。