2011-03-12 30 views
0

基本上我想qPtr [0]舉行特徵碼[0]C編程:需要新的眼光來看待這個[!演示代碼=功課]

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小時現在,並希望澄清我在做錯在概念上。謝謝!

回答

1

samplePtr[0]給出對象本身,而不是指向對象的指針。嘗試發送&samplePtr[0]samplePtr本身。 enque函數,第二個參數需要struct sample*而不是struct sample

+0

@jeeper_creepers - 與您的評論「認爲此陣已被初始化」,我想的'myQueue'也intialized有效值結構成員。這是你的意思嗎 ? – Mahesh 2011-03-12 07:23:23

0

如何:

enqueue(qPtr, &samplePtr[0]); 

的第二個參數排隊()需要一個指針到一個結構樣品。

0

您的代碼有兩個基本問題。

  • 你傳遞一個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; 
}