Структуры в с - PullRequest
       6

Структуры в с

0 голосов
/ 07 августа 2011

Я получаю ошибки для приведенной ниже программы.

#include "stdafx.h"
#include<stdio.h>

struct s 
{
  char *st;
  struct s *sp; 
};

struct s *p1,*p2;
swap(p1,p2);

int main()
{
    int i;
    struct s *p[3];
    static struct s a[]={
        {"abc",a+1},{"def",a+2},{"ghi",a}
    };
    for(i=0;i<3;i++)
    {
     p[i]=a[i].sp;
    }
    swap(*p,a);
    printf("%s %s %s\n",p[0]->st,(*p)->st,(*p)->sp->st);
    return 0;
}

swap(p1,p2)
{
    char *temp;
    temp = p1->st;
    p1->st = p2->st;
    p2->st = temp;
}

Как заставить эту программу работать. Даже если мы не установили int перед swap, я надеюсь, что по умолчанию он будет восприниматься как int.

ошибка C4430: отсутствует указатель типа - предполагается int.Примечание: C ++ не поддерживает default-int

ошибка C2078: слишком много инициализаторов

ошибка C2440: «инициализация»: невозможно преобразовать из «s *» в «int».что это преобразование возможно

ошибка C2450: термин не оценивается для функции, принимающей 2 аргумента

ошибка C2456: «своп»: стиль функции

Ответы [ 4 ]

3 голосов
/ 07 августа 2011

Попробуйте

void swap(struct s *p1, struct s *p2);

void swap(struct s *p1, struct s *p2)
{
    char *temp;
    temp = p1->st;
    p1->st = p2->st;
    p2->st = temp;
}
2 голосов
/ 07 августа 2011
swap(p1,p2)
{
    /* ... */
}

Это неправильно.Вам необходимо указать, какие типы p1,p2 являются частью определения функции.Даже то же самое с предварительным объявлением функции swap.А также упомяните, что это тип возврата.

2 голосов
/ 07 августа 2011

Ваша swap функция ничего не возвращает. В C это должно быть помечено ключевым словом void (см. Комментарий @ Dave о том, что это действительно разрешено, хотя выглядит так, как будто вы компилируете компилятором C ++, где это запрещено). Также необходимо указать типы p1 и p2:

void swap(struct s *p1, struct s *p2);

и

void swap(struct s *p1, struct s *p2)
{
  // ...
}
1 голос
/ 07 августа 2011

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

Во-первых, вам не нужно глобально объявлять параметры struct s *p1,*p2 функции, которую вы хотите определить. Во-вторых, прототип функции должен включать типы рассматриваемых параметров, а также тип возвращаемого значения (в вашем случае void). В-третьих, первый параметр функции swap - это указатель на вашу структуру, поэтому вам нужно передать первый элемент (указатель на массив s struct) of the p`.

Следующее компилируется и не вызывает ошибки, даже если я думаю, что его поведение не такое, как вы ожидаете.

#include <stdio.h>

struct s {
    char *st;
    struct s *sp; 
};

void swap(struct s *ptr1, struct s *ptr2);

int main() {
    int i;
    struct s *p[3];

    static struct s a[]={ {"abc",a+1}, {"def",a+2}, {"ghi",a} };
    for(i=0;i<3;i++) {
        p[i] = a[i].sp;
    }
    swap(p[0], a);
    printf("%s %s %s\n",p[0]->st,(*p)->st,(*p)->sp->st);
    return 0;
}

void swap(struct s *ptr1, struct s *ptr2) {
    char *temp;
    temp = ptr1->st;
    ptr1->st = ptr2->st;
    ptr2->st = temp;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...