このコードでは、struct Studentの配列を受け入れてポインタを使用して表示します。 コードはあまり一般的ではありません。共通のアプローチは、このコード自体の中に1行のコメントで示されています。「ポインタを使用して構造体の配列にアクセスする」
ただし、「パーセント」の正しい値が表示されないため、このアプローチでは問題があるようです。誰がこの問題の原因が何であるか教えてもらえますか?
#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 - Huh? 'p'は' myFriends'の最初の要素を指すように初期化されます。 –
@ sg7 typedefは、struct StudentをStudentに置き換えるために使用されます。 –
これは不明です。従来の '&p [i] .grade'などを使用するとどうなりますか? (最小限のテストケース(https://stackoverflow.com/help/mcve)を構築できますか?) –