이 코드는 struct Student 배열을 받아 들인 다음 포인터를 사용하여이를 표시합니다. 코드는 그리 일반적인 방법이 아닙니다. 일반적인 접근 방식은이 코드 자체 내에서 한 줄 주석으로 표시됩니다."포인터를 사용하여 구조체 배열에 액세스"
그러나 "백분율"의 올바른 값이 표시되지 않기 때문에이 접근 방식에 문제가있는 것 같습니다. 누구든지이 문제의 원인이 무엇인지 말해 줄 수 있습니까?
#include<stdio.h>
struct Student
{
char grade;
int rollNumber;
float percentage;
};
typedef struct Student Student;
void acceptArray(Student*);
void displayArray(Student*);
int main()
{
Student myFriends[3];
Student* p = myFriends;
acceptArray(p);
displayArray(p);
}
void acceptArray(Student* p)
{
int i = 0;
for(i = 0; i < 3; i++)
{
printf("\nEnter grade, roll number, and percentage:\n");
scanf(" %c %d %f",
(p + i),
//&(p + i)->grade
//&p[i].grade
((Student*)((unsigned int)p + sizeof(char)) + i),
//&(p + i)->rollNumber
//&p[i].rollNumber
((Student*)((unsigned int)p + sizeof(char) + sizeof(int)) + i)
//&(p + i)->percentage
//&p[i].percentage
);
}
}
void displayArray(Student* p)
{
int i = 0;
for(i = 0; i < 3; i++)
{
printf("\nGrade is : %c.", *(p + i));
//(p + i)->grade
//p[i].grade
printf("\nRoll number is: %d.", *((Student*)((unsigned int)p + sizeof(char)) + i));
//(p + i)->rollNumber
//p[i].rollNumber
printf("\nPercentage is : %.1f.", *((Student*)((unsigned int)p + sizeof(char) + sizeof(int)) + i));
//(p + i)->percentage
//p[i].percentage
}
}
@ sg7 - 응? 'p'는'myFriends'의 첫 번째 요소를 가리 키도록 초기화됩니다. –
@ sg7 typedef는 struct Student를 Student로 바꾸는 데 사용됩니다. –
이것은 불분명합니다 - 전통적인'& p [i] .grade' 등을 사용할 때의 문제점은 무엇입니까? (최소 테스트 케이스 (https://stackoverflow.com/help/mcve)를 만들 수 있습니까?) –