Указатель на структуру в С++

126
15 января 2020, 12:50

Я не понимаю как передается стуктура по указателю. Допустим, что есть структура:

typedef struct {
 char text[100];
 int value;
} console_menu;

И функция,которая принимает ее по указателю:

set_one_item(console_menu *menu) {
 sprintf(menu->text,"One item");
 menu->value=50;
}

Как именно она передается?

Когда функция принимает указатель,то на что он указывает ? на text или value ,или на адрес всей структуры в памяти?

Answer 1

Как именно она передается?

"Она" никак не передается. Передается не "она", а именно и только указатель.

В полу-формальной разговорной речи про такой способ передачи часто говорят, что "структура передается по указателю". Это нормально, но надо при этом четко понимать, что фактически передается именно и только указатель.

Когда функция принимает указатель,то на что он указывает собственно?

У вас в объявлении функции ясно написано, что это указатель на структуру. Вот на такую структуру он и должен указывать.

А дальше все зависит только от вас. Какой указатель вы передали в точке вызова - такой указатель и получит функция. Он может вообще ни на что не указывать, если вы передадите в функцию null-указатель. Вы в своем примере кода не показали ни одного вызова функции.

Answer 2

Если сослаться на два источника (раз и два), то указатель хранит адрес всей структуры в памяти. При этом адрес первого элемента структуры совпадает с адресом самой структуры. В этом легко убедиться с помощью простой программы:

#include <iostream>
struct SampleStruct
{
    char text[100];
    int value;
};
int main()
{
    SampleStruct *p_struct;
    std::cout << "Struct address: " << p_struct << std::endl;
    std::cout << "Struct size: " << sizeof(*p_struct) << std::endl;
    std::cout << "Text address: " << &(p_struct->text) << std::endl;
    std::cout << "Value address: " << &(p_struct->value) << std::endl;
    return 0;
}
READ ALSO
Возведение в степень. Найти ошибку

Возведение в степень. Найти ошибку

Во входном файле INPUTTXT содержится единственное число A (1 ≤ A ≤ 10^9)

129
Вид отношения между классами

Вид отношения между классами

Как вы думаете, какой вид отношения между классами std::reference_wrapper и std::mutex?ref используется в виде обертки для обертки mutex'а, чтобы представить...

138
Размер классов при наследовании в С++

Размер классов при наследовании в С++

Если создать 2 таких класса:

145