1

这一定是一个很简单的问题,我有一个结构体,里面有四个元素,一个结构体变量被初始化为一个数组,现在的问题是我可以访问数组的第一行但我不知道如何访问剩余的行...请指导我!

  //structure is defined as follows      
  typedef struct{
        char first_name[100];
        char second_name[100];
        int x_position;
        int y_position;       
    } names;   

 int main(void)
 {
   int i=0;    
   //here i have initilized structure variable   
  names my_data[] = {
                {"First", "Row",  20, 12},
                {"Second", "Row", 55, 30},
                {"Third",  "Row", 80, 47},
                {"Fourth", "Row", 27, 34}
              }; 
    //trying to acess the diffrent row elements ....but dont know how??
    for(i=0; i<=3; i++)
    {
        printf("%s\n",my_data->first_name);
        printf("%s\n",my_data->second_name);
        printf("%d\n",my_data->x_position);
        printf("%d\n",my_data->y_position);
    }   
    system("PAUSE");    
    return 0;
   }
4

4 回答 4

5

在循环正确:

 printf("%s\n", my_data[i].first_name);

注意:数组下标运算符的优先级高于通过对象名称运算符选择成员,因此您不需要括号。[].()

或者

 printf("%s\n",(my_data + i)->first_name);

其次,+加号运算符的优先级较低,因此我们需要括号来覆盖优先级。

于 2013-08-20T07:51:20.907 回答
1

你需要把i: -

  printf("%s\n",my_data[i].first_name);

更改代码:-

//structure is defined as follows

  typedef struct{
        char first_name[100];
        char second_name[100];
        int x_position;
        int y_position;

        }names;


 int main(void)
 {
     int i=0;

   //here i have initilized structure variable

  names my_data[] = {         {"First", "Row",  20, 12},
                              {"Second", "Row", 55, 30},
                              {"Third",  "Row", 80, 47},
                              {"Fourth", "Row", 27, 34}
                                             }; 
    //trying to acess the diffrent row elements ....but dont know how??
    for(i=0; i<=3; i++)
    {
    printf("%s\n",my_data[i]->first_name);
    printf("%s\n",my_data[i]->second_name);
    printf("%d\n",my_data[i]->x_position);
    printf("%d\n",my_data[i]->y_position);
    }

   system("PAUSE");

    return 0;
   }
于 2013-08-20T07:51:47.653 回答
0
//structure is defined as follows

#include <stdio.h>

  typedef struct{
        char first_name[100];
        char second_name[100];
        int x_position;
        int y_position;

        }names;


 int main(void)
 {
     int i=0;

   //here i have initilized structure variable

  names my_data[] = {         {"First", "Row",  20, 12},
                              {"Second", "Row", 55, 30},
                              {"Third",  "Row", 80, 47},
                              {"Fourth", "Row", 27, 34}
                                             }; 
    //trying to acess the diffrent row elements ....but dont know how??
    for(i=0; i<=3; i++)
    {
    printf("%s\n",my_data[i].first_name);
    printf("%s\n",my_data[i].second_name);
    printf("%d\n",my_data[i].x_position);
    printf("%d\n",my_data[i].y_position);
    }


    return 0;
   }

您应该在数组中索引所需的项目;在您的示例中,您使用 my_data 作为指向 my_data[0] 的指针

于 2013-08-20T07:53:53.490 回答
0

有不同的方法。您可以使用索引变量来访问此处其他人提到的字段,也可以使用指针。您可以在数组中添加一个额外的空字段以将其标记为数据结尾:

names my_data[] = {
    {"First", "Row",  20, 12},
    {"Second", "Row", 55, 30},
    {"Third",  "Row", 80, 47},
    {"Fourth", "Row", 27, 34}
    {NULL, NULL, 0, 0}
}; 

names* my_data_ptr = my_data;
while (my_data_ptr->first_name) {
    printf("%s\n",my_data_ptr->first_name);
    printf("%s\n",my_data_ptr->second_name);
    printf("%d\n",my_data_ptr->x_position);
    printf("%d\n",my_data_ptr->y_position);
    my_data_ptr++;
}

好处是你不必提前知道数组的大小。

于 2013-08-20T07:59:10.507 回答