【问题标题】:doubts in double pointer in CC中双指针的疑问
【发布时间】:2009-06-22 06:27:31
【问题描述】:

以下代码运行成功...

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();
}

【问题讨论】:

    标签: c pointers struct


    【解决方案1】:

    您正在尝试将整数分配给结构:

    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*,并且int y 可以隐式转换为赋值中的指针。但这并没有什么用处。

    【讨论】:

      【解决方案2】:
      u->h[1]=y;
      

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

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

      printf() 也是如此。

      【讨论】:

        【解决方案3】:

        排队

        u->h[1]=y;   
        

        左边是一个结构,而不是一个整数。写

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

        然后您将 y 分配给结构的字段 r,这就是您打算做的。

        【讨论】:

          【解决方案4】:

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

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-05-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多