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

关于指针的一个有关问题,求解答

2013-03-06 
关于指针的一个问题,求解答本人新手,C语言刚学到数据结构,动态创建顺序表时有个问题搞不懂,部分代码如下:t

关于指针的一个问题,求解答
本人新手,C语言刚学到数据结构,动态创建顺序表时有个问题搞不懂,部分代码如下:
typedef struct
{
   int *elem;
   int length;
   int listsize;
}List;                  //定义一个顺序表

void init(List *L)      //初始化顺序表
{
   L->elem=(int*)malloc(initsize*sizeof(List));
   if(!L->elem)  exit(0);
   L->length=0;
   L->listsize=initsize;
}
下面是主函数:
int main()
{
   List *L;
   init(L);

   return 0;
}
在主函数这里,如果是Link *L,初始化就会出错,程序就会停在L->elem=(int*)malloc(initsize*sizeof(List))这里,为什么呢?不能定义一个List结构的指针吗?
如果改为Link L; init(&L);程序就可以用,为什么?
[解决办法]
因为你定义的指针没有指向一个有效的内存地址(野指针),所以访问elem就会出错;而如果你定义了一个对象,将其地址传进去就可以访问其中的成员elem
[解决办法]
int main()
{
   List *L;
   init(L);

   return 0;
}
你这里的L系悬垂指针,也就是不指向任何对象的。那么你的初始化函数里的 L->elem成员又如何得到呢?因为L都还没指向任何List对象。
如果你一定要用指针,可以参考如下:
int main()
{
    List *L, ob;
    L = &ob;
    init(L);
    return 0;
}
这样,L就不是悬垂指针了。编译应该也能通过了。

热点排行