Как получить доступ к каждому элементу структуры с помощью указателя в C ++ - PullRequest
2 голосов
/ 19 января 2012

У меня проблемы с доступом к отдельным элементам структуры. Как вывести каждый элемент структуры, используя указатель?

#include <iostream>

using namespace std;

struct student{
int rollno;
float marks;
char name[45];
};

int main(){
student s1[2]={{1,50.23,"abc"},{2,65.54,"def"}};


for(int j=0;j<2;j++){
    cout<<"Output Rollno, Marks and Name Using Pointer"
}
return 0;
}

Ответы [ 5 ]

3 голосов
/ 19 января 2012

Просто назначьте адрес указателю и напечатайте его.

student *ptr=s1; // or &s1[0], instead.
cout<<ptr->rollno;
2 голосов
/ 19 января 2012

Если вы хотите быть настоящим сырым:

void* ptr = &s1[0];

for(int j=0;j<2;j++){
    cout<< (int)*ptr << "," << (float)*(ptr+sizeof(int)) << "," << (char*)*(ptr+sizeof(int)+sizeof(float)) << endl;
}
2 голосов
/ 19 января 2012

ваш цикл должен выглядеть примерно так:

for(int j=0;j<2;j++){
    cout<<"Rollno:" << s1[j].rollno << " Marks:" << s1[j].marks << " Name:" << s1[j].name << endl;
}

или, используя указатель (т.е. массив + смещение):

for(int j=0;j<2;j++){
    cout<<"Rollno:" << (s1+j)->rollno << " Marks:" << (s1+j)->marks << " Name:" << (s1+j)->name << endl;
}
2 голосов
/ 19 января 2012

У вас нет указателя.

Для вывода полей вы делаете то, что делаете в любой другой ситуации, например:

cout << "marks = " << s1[j] << "\n";
0 голосов
/ 19 января 2012
char* p = (char* )s1;

for(int j=0;j<2;j++){ 
    int* a = (int*) p;
    cout << *a  << " ";
    a++;
    float* b = (float*) a;
    cout << *b  << " ";
    b++;
    char* c = (char*) b;
    cout << c << " ";
    c = c + 45 + strlen(c);
    cout<<endl;
    p = c;
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...