malloc函数的使用要调用malloc.h的头文件。
malloc函数后面的sizeof主要用于指示分配内存的大小,由于malloc函数默认返回void类型(无类型,一般用于无返回值的函数。)
create函数的创建如下所示:
malloc分配内存块的函数;且需添加头文件#include <malloc.h>;
sizeof判断数据类型的长度符;
malloc返回的是开辟空间的首地址,他并不知道你放的是什么类型的东西,所以要用第一个括号中的内容强制转换指针类型为struct weapon*,和p1的类型转为一样,否则会警告指针类型不符合;
malloc分配内存块的函数,sizeof判断数据类型长度符
当不存在时给head一个空值NULL
判定while(),调用
malloc分配内存块的函数
sizeof判断数据类型的长度符
武器信息的单向动态链表,在程序执行的过程中逐渐创建节点
struct weapon * create()//返回值是链表的头指针
{struct weapon * head;//头指针
struct weapon * p1,*p2;//链表当前新创建的节点,上一个节点
int n=0;//记录当前链表个数
p1=p2=(struct weapon *)malloc(sizeof(struct weapon));//#include<malloc.h>,malloc分配内存块,sizeof判断数据类型的长度符
head=null;//赋初值
scanf("%d,%d",&p1->price,&p1->atk);
while(p1->price!=0)
{
n++;
if(n==1)head=p1;
else p2->next = p1;//上一个节点的next指向创建的新节点
p2=p1;//创建完成之后更新旧节点
p1=(struct weapon *)malloc(sizeof(struct weapon));//更新p1
scanf("%d,%d",&p1->price,&p1->atk);
}
p2->next=null;
return (head);
}
struct weapon * p;
p=creat();//p是头指针,指向第一个节点
malloc返回的是开辟空间的首地址,他并不知道你放的是什么类型的东西,所以要用第一个括号中的内容强制转换指针类型为struct weapon*,和p1的类型转为一样,否则会警告指针类型不符合
#include <stdio.h>
struct nam
{
char *name[20]; //用指针
int old;
float height;
struct nam * next;
};
int main()
{
struct nam a,b, *head;
a.name[0]="李"; //第一个地址
a.old=16;
a.height=70.2;
b.name[0]="林";
b.old=21;
b.height=65.3;
head=&a;
a.next=&b;
b.next=NULL;
struct nam *w;
w=head;
while (w!=NULL){
printf("姓名:%s\n年龄:%d\n身高:%f\n",w->name[0],w->old,w->height); //把地址取出来
w=w->next;
}
return 0;
}
动态链表: #include<malloc.h> //注意加这个头文件 struct weapon *create() //creat函数 { struct weapon *head; struct weapon *p1, *p2; int n=0; p1=p2=(struct weapon*)malloc(sizeof(struct weapon)); //malloc 分配内存块的函数,sizeof判断数据类型长度符; scanf("%d,%d",&p1->price,&p1->atk); head = NULL; //初始化第一个结点 while(p1->price!=0) //结束开辟结点判定条件 { n++; if(n==1) head=p1; else p2->next=p1; p2=p1; p1=(struct weapon*)malloc(sizeof(struct weapon)); scanf("%d,%d",&p1->price,&p1->atk); } p2->next = NULL; retrun(head); }
简化后代码,并且分析了各作用 ,分层明确,容易懂和识别
#include <stdio.h>
#include <malloc.h>
struct weapon { //这层函数作用设立变量名和这节函数指针
int price;
int atk;
struct weapon * next;
};
struct weapon * create(){
struct weapon * head; struct weapon * p1,*p2; //创建头指针和节点指针
head,p2->next =NULL;//头指针和节点指针,都需要放数据所以需要注空
p1=(struct weapon *)malloc(sizeof(struct weapon));//建立第一节点空间,并可以输入
scanf("%d,%d",&p1->price,&p1->atk);
int n=0;//循环并设立指向头指针和p2指针方向
while(p1,p2->price!=0){
n++;
if(n==1) head=p1;
else p2->next=p1;
p2=p1;
p2=(struct weapon*)malloc(sizeof(struct weapon));// 建立第二节点空间
scanf("%d,%d",&p2->price,&p2->atk);
}
return (head);
}
int main(){//建立前2个函数指针并指引然后运行函数输出
struct weapon * p;
p=create();
printf("%d,%d",p->atk,p->price);
return 0;
}
1.注意头文件