首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

c语言指针有关问题

2012-03-28 
c语言指针问题代码的意思是要创建一个1—9的整数链表,在代码中遇到了强制转换数据类型的问题,在这里有些疑

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后仍旧在循环,内存就溢出了

热点排行