【求助!】建立从1到9的整数链表,并打印。
- C/C++ code
#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'); }请问,这个程序代码我基本能看懂,但是在 *(char **)p=q; 语句中,为什么要把p强制转换成二级指针呢?本来p指向的是结构体后半部分存放下一个结构地址的空间,这个空间里面存放的是一个地址,如果是**p。那么不就是下一个结构的首地址内的元素了吗?请高手不吝赐教,为什么要把p从一级指针转换到二级指针?谢过!
[解决办法]
[解决办法]