代码之家  ›  专栏  ›  技术社区  ›  farooq GV

如何仅使用指针访问结构数组

  •  -2
  • farooq GV  · 技术社区  · 2 年前

    我试图访问students结构数组,并在给定索引处修改“Student”(使用for循环)。




    但大致是这样的:
    *(studentPtr+currStudent)。实用=实践等级;
    注意:上面的行不编译。

    #include <stdlib.h>
    #include <stdio.h>
    
    typedef struct Student
    {
        double theory;
        double practical;
    } Student;
    
    int main()
    {
        Student students[50];
        const int numStudents;
        int thoeryGrade, practicalGrade = 0;
        Student *studentPtr = students;
    
        printf("Enter number of students: ");
        scanf("%d", &numStudents);
    
        while (1)
        {
            for (int currStudent = 0; currStudent < numStudents; currStudent++)
            {
                printf("Enter theory average of student %d: ", (currStudent + 1));
                scanf("%d", &thoeryGrade);
    
                printf("Enter practical average of student %d: ", (currStudent + 1));
                scanf("%d", &practicalGrade);
    
                students[currStudent].theory = thoeryGrade;
                *(studentPtr + currStudent).practical = practicalGrade;
                printf("\n");
            }
            for (int currStudent = 0; currStudent < numStudents; currStudent++)
            {
                printf("Student # %d -> Theory: %.2f", (currStudent + 1), students[currStudent].theory);
                printf("\n");
                printf("Student # %d -> Practical %.2f", (currStudent + 1), students[currStudent].practical);
                printf("\n\n");
            }
        }
    
        return 0;
    }
    
    1 回复  |  直到 2 年前
        1
  •  2
  •   Unmitigated    2 年前

    . 运算符的优先级高于 * *(studentPtr + currStudent)

    (*(studentPtr + currStudent)).practical = practicalGrade;
    

    或者,使用 ->

    (studentPtr + currStudent)->practical = practicalGrade;
    
        2
  •  0
  •   Fe2O3    2 年前

    此代码有问题。

    您必须忽略编译器关于 const 在声明中 const int numstudents .

    scanf() 接受整数,然后将该对存储为double?

    它可能是安全的(?)要忽略数组的第0个元素,并进行输入和打印循环,请执行以下操作:

    for (int currStudent = 1; currStudent <= numStudents; currStudent++)
    

    那么你就不需要 currStudent+1 超重行李。

    for (int currStudent = 1; currStudent <= numStudents; currStudent++) {
        Student *pCur = &students[ currStudent ];
    

    pCur->theory pCur->practical