以下代码成功运行...
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();
}
答案 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,这是可能的,但几乎总是错误的。