c программирование: нужны свежие глаза, чтобы посмотреть на этот [демонстрационный код! = домашнее задание] - PullRequest
0 голосов
/ 12 марта 2011

По сути, я хочу, чтобы qPtr [0] содержал sPtr [0]

struct myQueue{  
    struct sample* node;  
    int front;  
    int size;  
    int numElements;  
};  

struct sample{  
    int field1[5];  
    char field2[10];  
}  

int main(){    
    struct myQueue* qPtr = malloc(10 * sizeof(struct myQueue);   
    struct sample* samplePtr = malloc(10 * sizeof(struct sample); //assume this array has                     been initialized    
    enqueue(qPtr, samplePtr[0]); //this does not work
}  

//returns 1 if enqueue was successful  
int enqueue(struct myQueue* qPtr, struct sample* sPtr){  

    qPtr->node[(qPtr->front + qPtr->numElements) % qPtr->size] = sPtr;  //code pertains to circular array implementation of queues  
    return 1;  
}  

Я занимался этим около 2 часов и был бы признателен за разъяснение того, что я делаю неправильно в концептуальном плане.спасибо!

Ответы [ 3 ]

1 голос
/ 12 марта 2011

samplePtr[0] дает сам объект, а не указатель на объект. Попробуйте отправить &samplePtr[0] или samplePtr сам. enque функция, второй параметр ожидает тип struct sample*, а не struct sample.

0 голосов
/ 12 марта 2011

В вашем коде есть 2 фундаментальные проблемы.

  • вы передаете объект struct sample в enqueue() вместо указателя на struct sample.это должно быть перехвачено компилятором.
  • вы устанавливаете массив структур очереди вместо того, чтобы иметь единственный объект структуры очереди, который управляет массивом указателей на объекты, которые находятся в очереди.Это проблема дизайна.

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

struct myQueue{  
    struct sample* node;  
    int front;  
    int size;  
    int numElements;  
};  

struct sample{  
    int field1[5];  
    char field2[10];  
}  

struct myQueue q = {0};

int enqueue(struct myQueue* qPtr, struct sample* sPtr);

int main(){  
    // get memory to hold a collection of pointers to struct sample:
    q.node = calloc(10, sizeof(struct sample*));
    q.size = 10;

    // allocate a sample
    struct sample* samplePtr = malloc(sizeof(*samplePtr));

    // put the sample on the queue
    enqueue(qPtr, samplePtr);
}  



//returns 1 if enqueue was successful  
int enqueue(struct myQueue* qPtr, struct sample* sPtr){  

    qPtr->node[(qPtr->front + qPtr->numElements) % qPtr->size] = sPtr;  //code pertains to circular array implementation of queues  
    return 1;  
}  
0 голосов
/ 12 марта 2011

Как насчет:

enqueue(qPtr, &samplePtr[0]);

Второй параметр enqueue () принимает указатель на образец структуры.

...