建立从1到9的整数链表,并打印
这是在C语言学习视频上看到的一个程序,我是按照视频输入的,但是运行不了,我将自己理解的注上了,当然我的理解也不一定对,如果哪位高人看出问题了请不吝赐教
程序如下:
程序代码:
#include<stdio.h> #define INTSIZE sizeof(int) #define NODESIZE sizeof(int)+sizeof(char *) #define ERROR {printf("error\n");return;} int main() { int i; char *p,*q,*first,*malloc(); if((p=malloc(NODESIZE))==NULL)ERROR /*申请NODESIZE个字节的内存空间,将首地址给p*/ first=p; /*设置first为指向链表头的指针*/ *(int *)p=1; /*将p强转成int型指针,并对p所指向的变量赋值,即*p=1*/ p+=INTSIZE; /*p指针下移两个字节*/ for(i=2;i<10;i++,p+=INTSIZE) if((q=malloc(NODESIZE))==NULL)ERROR /*为第i个元素申请NODESIZE个字节的内存空间,将首地址给q*/ else { *(char **)p=q; /*将p强制升级成指向字符的二级指针,并将一级指针q的地址放在p中 此时第(i-1)个数据元素的指针域存放的就是第i个节点的地址*/ p=q; /*将q赋给p,此时p指向第i个数据元素的首地址*/ *(int*)p=i; /*将p强转成int型指针,并将p所指向的变量赋值为i*/ } *p=NULL; /*链表的结尾处指针域为空*/ for(p=first;p;p+=INTSIZE,p=*(char **)p=i) /* 打印链表值*/ printf("%d",*(int *)p); putchar('\n'); }