c语言指针问题
代码的意思是要创建一个1—9的整数链表,在代码中遇到了强制转换数据类型的问题,在这里有些疑问
代码如下:
#include "stdio.h"
#define INTSIZE sizeof(int)
#define NODESIZE sizeof(int) + sizeof(char *)
#define ERROR {printf("error\n");return;}
main()
{
int i;
char *p, *q, *first, *malloc();
if((p=malloc(NODESIZE))==NULL)
{
ERROR
}
else
{
first = p;
*(int *)p = 1; /* 1. 我在这儿。。*/
p+=INTSIZE;
}
for(i=2;i<10;i++,p+=INTSIZE)
{
if((q=malloc(NODESIZE))==NULL)
{
ERROR
}
else
{
*(char **)p = q; /* 2.我到这儿了。。*/
p = q;
*(int *)p = i;
}
}
*p = NULL;
for(p=first;p;p+=INTSIZE,p=*(char **)p)
{
printf("%d ",*(int *)p);
}
printf("\n");
}
我想问:
1. 比如代码中的指针p,在对它进行了 *(int *)p = 1 这一步之后,紧接着下一个语句里的 p 的数据类型依然是 int * 呢,还是又回到开始定义时候的 char * 了?
2. *(char **)p = q 这里把 p 转成了 char** ,然后把 q 的地址给了 p ,但是后面的 q 中放入的是一个 int 类型的值,用 char** 放一个装着 int 类型值的指针的地址,这个作何理解?
3. 我在VC 6.0中跑以上代码,虽然输出了正确值,但同时还伴随一声“咚!”,弹出那个框,想问一下问题出在什么地方。
请大家解答,有劳了。
[解决办法]
把char直接改为int吧
[解决办法]
既然是整数列表,为何要定义成char?
[解决办法]
*p = NULL;
没起到作用,最后一个for循环到9后仍旧在循环,内存就溢出了