Форум программистов, компьютерный форум CyberForum.ru

Указатель на структуру, правильная ли запись? - C++

Восстановить пароль Регистрация
 
feo153
1 / 1 / 0
Регистрация: 16.09.2013
Сообщений: 20
18.10.2013, 09:41     Указатель на структуру, правильная ли запись? #1
Решаю упражнения на некотором сайте и вот задачка, на которой я "завис"
Условие:
This program has a pre defined structure called 'student' consisting of variables 'name', 'age' and 'cgpa'. The main function has a pointer to that structure called 'std'.

You have to initialize the variable 'std', then ask the user to enter values for name, age and CGPA of 'std'. At the end, display the values on the screen as shown.
Вот пример ввода-вывода:
Enter name: John Doe
Enter age: 21
Enter CGPA: 3.22
John Doe
21
3.22
Код, который задан в упражнении (его нужно дописать по условию задачи):


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
#include <string>
 
using namespace std;
 
struct student
{
    string name;
    int age;
    float cgpa;
};
 
int main()
{
    student *std; // вот эта запись мне не понятна
 
    //WRITE YOUR CODE HERE
    
    
    
    
    
    
    
    //
    return 0;
}
Возможно я ошибаюсь, или не ту "мурзилку курю" (Прата), но следующая запись мне совершенно непонятна. Может ошибка в задании?

C++
1
student *std;
Спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.10.2013, 09:41     Указатель на структуру, правильная ли запись?
Посмотрите здесь:

Указатель void на структуру C++
Указатель на структуру C++
C++ указатель на структуру
C++ указатель на структуру
указатель на структуру C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.10.2013, 09:48     Указатель на структуру, правильная ли запись? #2
Цитата Сообщение от feo153 Посмотреть сообщение
Указатель на структуру, правильная ли запись?
Правильная.
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
18.10.2013, 09:56     Указатель на структуру, правильная ли запись? #3
Цитата Сообщение от feo153 Посмотреть сообщение
student *std;
эта запись неправильная. посмотрите на строчку 6. std - это пространство имен, а вы объявляете указатель с тем же самым именем. лучше переименовать

C++
1
student *stud; // вот эта запись мне не понятна
что в этой строчке происходит? здесь объявляется указатель на student,
но на что именно он указывает неясно. т.е. какой адрес записан в него непонятно.
это может быть все что угодно.

а вот для того чтобы выделить память, то для этого в c++ есть такая штука как new:

C++
1
2
3
4
5
stud = new student; // где-то в памяти выделяется достаточный объем памяти для student
 
stud->name = "имя_студента";
stud->age = 17;
stud->cgpa = 1;
Добавлено через 2 минуты
но и в конце программы можно освободить выделенную память
C++
1
delete stud;
feo153
1 / 1 / 0
Регистрация: 16.09.2013
Сообщений: 20
18.10.2013, 10:06  [ТС]     Указатель на структуру, правильная ли запись? #4
Я с Вами полностью согласен. Но дело в том, что указанный код - это условие задачи и его нужно дописать, а не исправить или все затереть и написать с нуля, добившись правильного вывода. Такой вот подвох, где стандартных знаний (по крайней мере моих не хватает).
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.10.2013, 10:11     Указатель на структуру, правильная ли запись? #5
Цитата Сообщение от _ Посмотреть сообщение
эта запись неправильная. посмотрите на строчку 6. std - это пространство имен, а вы объявляете указатель с тем же самым именем. лучше переименовать
Может и лучше... Но разве не компилируется?
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5548 / 2562 / 233
Регистрация: 01.11.2011
Сообщений: 6,333
Завершенные тесты: 1
18.10.2013, 10:14     Указатель на структуру, правильная ли запись? #6
Впринципе _ дело говорит. Плохо стандартными именами переменные называть.
Но указатель на пространство имен?..
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.10.2013, 10:17     Указатель на структуру, правильная ли запись? #7
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Плохо стандартными именами переменные называть.
Согласен, но код вполне рабочий (для двух компиляторов: студия и mingw):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
#include <string>
 
using namespace std;
 
struct student
{
    string name;
    int age;
    float cgpa;
};
 
int main()
{
    student *std; // вот эта запись мне не понятна
    student s = {"aaa", 1, 2.0};
    std = &s;
    cout << s.name << endl << s.age << endl << s.cgpa << endl;
    
    //WRITE YOUR CODE HERE
    
    //
    return 0;
}
Поэтому, я бы не сказал, что запись ошибочна.
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
18.10.2013, 10:17     Указатель на структуру, правильная ли запись? #8
Цитата Сообщение от alsav22 Посмотреть сообщение
Но разве не компилируется?
не пробовал. даже если и скомпилируется, то ничего хорошего от этого не будет. сами себя запутаем этими std.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.10.2013, 10:24     Указатель на структуру, правильная ли запись? #9
Немного не так, поспешил:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
#include <string>
using namespace std;
 
 
struct student
{
    string name;
    int age;
    float cgpa;
};
 
int main()
{
    student *std; // вот эта запись мне не понятна
    student s = {"aaa", 1, 2.0};
    std = &s;
    cout << std ->name << endl << std ->age << endl << std ->cgpa << endl;
    
    //WRITE YOUR CODE HERE
    
    //
    return 0;
}
Добавлено через 1 минуту
Цитата Сообщение от _ Посмотреть сообщение
не пробовал.
А зря...
Цитата Сообщение от _ Посмотреть сообщение
сами себя запутаем этими std.
Согласен, сам бы не стал так делать (в коде не обратил внимание на это), но для компиляторов ошибки в этом нет.
feo153
1 / 1 / 0
Регистрация: 16.09.2013
Сообщений: 20
18.10.2013, 10:29  [ТС]     Указатель на структуру, правильная ли запись? #10
Спасибо ребята!
Все получилось. Видимо по-ночам все-таки надо спать))
Рабочий код (Visual Studio 2008):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <iostream>
#include <string>
 
using namespace std;
 
struct student
{
    string name;
    int age;
    float cgpa;
};
 
int main()
{
student *std;// даже смешно и стыдно, почему вчера у меня это вызвало затруднения
std=new student;
    
cout<<"Enter name: ";
getline(cin,std->name);
cout<<"Enter age: ";
cin>>std->age;
cout<<"Enter CGPA: ";
cin>>std->cgpa;
cout<<endl;
    //WRITE YOUR CODE HERE
    
    
    
cout<<std->name<<endl;
cout<<std->age<<endl;
cout<<std->cgpa;
    
    
    delete std;
    //
   system("pause");
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.10.2013, 10:54     Указатель на структуру, правильная ли запись?
Еще ссылки по теме:

Создать указатель на структуру C++
Указатель на шаблонную структуру C++
Указатель на структуру C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
18.10.2013, 10:54     Указатель на структуру, правильная ли запись? #11
Цитата Сообщение от feo153 Посмотреть сообщение
Видимо по-ночам все-таки надо спать))
правильно. надо по ночам спать а еще надо отказаться от плохого стиля программирования)
вот так кто-нибудь возьмет эту программу и увидит строчку

Цитата Сообщение от feo153 Посмотреть сообщение
cout<<std->name<<endl;
и будет долго-долго думать над ней. что же она означает и с каких пор пространство имен std используется как указатель
Yandex
Объявления
18.10.2013, 10:54     Указатель на структуру, правильная ли запись?
Ответ Создать тему
Опции темы

Текущее время: 00:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru