C中双指针的疑惑

时间:2009-06-22 06:27:32

标签: c pointers struct

以下代码成功运行...

typedef struct _s
{
  int *r;

}s;

void main()
{
   s *u;
   int y=1000;  
   u=malloc(sizeof(s)*8);
   u->r=malloc(sizeof(int)*8);
   u->r[5]=y;

   printf("%d\n",u->r[5]);
   getch();
}

但是我写了如下的代码 但是给出错误....我使用结构.....为什么我知道原因....? 如果我使用双指针(... e ** h ...)产生正确的输出......但原因是......?

typedef struct _e
{
   int r;
}e;

typedef struct _s
{
  e *h;

}s;

void main()
{
   s *u;
   int y=1000;   
   u=malloc(sizeof(s)*8);

   u->h=(e*)malloc(sizeof(e)*10);
   u->h[1]=y;
   printf("%d\n",u->h[1]);   
   getch();
}

4 个答案:

答案 0 :(得分:4)

您正在尝试为结构分配一个整数:

int y=1000;   
u->h[1]=y;

可能您想使用u->h[1].r(以及以下打印语句中):

u->h[1].r=y;
printf("%d\n",u->h[1].r);   

如果h被声明为e**,则不会出现任何错误,因为u->h[1]的类型为e*,而y可以是{{1}}隐式转换为赋值中的指针。但那并没有真正有用的东西。

答案 1 :(得分:1)

u->h[1]=y;

尝试将int分配给结构。相反它应该是

u->h[1].r=y;

对于printf()也是如此。

答案 2 :(得分:1)

在第

u->h[1]=y;   

左侧是结构,而不是整数。写

u->h[1].r=y;   

并将y指定给struct的字段r,这是你打算做的。

答案 3 :(得分:0)

首先,你为什么要这样做?拥有一个字母的名称,没有一个元素的结构是没有意义的。

是一个表示包含单个指针到e的结构的类型,而该指针又是一个包含单个int的类型。

u是指向s的指针,因此u-> h [1]的类型为e。您不能将int分配给e。它似乎与** h一起使用的唯一原因是因为你正在为指针分配一个int,这是可能的,但几乎总是错误的。