LINUX.ORG.RU

Изменение полей структуры через указатели

 


0

1

Всем привет. Окончательно запутался со структурами и указателями на на них. Есть код:

#include <stdio.h>
struct
{
	double d1, d2, d3, d4, d5, d6, d7;
} in_data;

void data_input(struct in_data *p_in_data);

int main()
{
        // Приравнивание значений для всех переменных находящихся в структуре
        in_data.d7 = 0.7;
	data_input(&in_data);
}
void data_input(struct in_data *p_in_data)
{
	*p_in_data.d7 = 0.8;
}

Ошибка: *p_in_data идентификатор не определен, либо выражение должно иметь тип класса.

Не знаю, что я не так делаю? Где ошибка и как её исправить? Заранее спасибо.



Последнее исправление: k_savelev (всего исправлений: 1)

Ответ на: комментарий от k_savelev
struct in_data

Это тип.

struct in_data res = {0};

res - это переменная типа struct in_data инициализированная нулями.(одним числом, это только 0 такое поддерживает, если нужна инициализация другим числом, то инициализируй поэлементно)

fsb4000 ★★★★★
()
Вот тебе дружочек пуховый платочек
// Online C++ compiler to run C++ program online
#include <iostream>
#include <stdio.h>

// -----------
//
typedef struct in_data__ {
    
 double d1, d2, d3, d4, d5, d6, d7;
 
} in_data_;

// -----------
//
void data_input(
 in_data_  *p_in_data
) {
    
 p_in_data->d7 = 0.8;
 
}

// -----------
//
// -----------
//
int main() {
   
 in_data_  in_data;
 
 // Приравнивание значений для всех переменных находящихся в
 //
 in_data.d7 = 0.7;
        
 data_input(
  &in_data
 );
 
 std::cout << in_data.d7 << std::endl;

}

Владимир 123

anonymous
()

у типа-структуры может быть, а может отсутствовать тег — имя, по которому на тип можно сослаться в каком-то другом месте программы, а не только в месте определения. если тег отсутствует (как в твоём случае), то структура становится анонимной и по понятным причинам сослаться на такую структуру в дальнейшем не получится.

так как у тегов своё пространство имён, то они могу быть похожи на переменные или типы, определённые через typedef.

struct in_data   /* тег пишется сразу после слова struct */
{
    double d1, d2, d3, d4, d5, d6, d7;
} in_data;

...

    p_in_data->d7 = 0.8;
anonymous
()
Ответ на: комментарий от fsb4000
#include <stdio.h>
struct in_data
{
	double d1, d2, d3, d4, d5, d6, d7;
} in_data_1;

int main()
{
	data_input(&in_data_1);
}

void data_input(struct in_data* p_in_data)
{
	in_data_1.(*p_in_data).d1 = 34.3;
}

Тогда получается, что мне нужно работать с переменной in_data_1, которая имеет формат структуры in_data. Иначе я не понимаю, что строка (*p_in_data).d1 = 34.3; меняет.

k_savelev
() автор топика
Ответ на: комментарий от anonymous

Зачем же тут С++, когда можно это всё сделать на C?

k_savelev
() автор топика
Ответ на: комментарий от k_savelev

Понятно как внести изменения в переменную, если она не имеет структурных переменных, но если переменная структурная есть, то как к ней обратиться через указатели?

k_savelev
() автор топика
Ответ на: комментарий от k_savelev

ты имеешь в виду когда структура является полем стркутуры?

struct in_data
{
    double d1, d2, d3, d4, d5, d6, d7;
} in_data;

struct in_data2
{
    struct in_data id1, *id2;
} in_data2;

struct in_data2 *p_in_data2;


void fun() {
    in_data2.id1.d2 = 0.1;
    in_data2.id2->d2 = 0.2;
    
    p_in_data2->id1.d2 = 0.3;
    p_in_data2->id2->d2 = 0.4;
}
anonymous
()
Ответ на: комментарий от k_savelev

Понятно как внести изменения в переменную, если она не имеет структурных переменных, но если переменная структурная есть, то как к ней обратиться через указатели?

внесите переводчика...

jo_b1ack ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.