2012-04-22 4 views
0

그래, 내가 놓친 바로 그 해결책이 있겠지만, 지금은 내 코드가 "A [i] -> key = 0; " Record * Item 부분은 프로그램의 필수 항목이므로, 작업중인 할당에 대해이 방식으로 작업해야합니다. 그러나 Item을 Record의 포인터가 아닌 typedef가되도록 변경하면 A [i] .key는 문제없이 사용할 수 있습니다. standalput이 레코드에 대한 포인터의 배열에 값을 올바르게 할당 할 수 있도록 올바른 방향으로 넛지가 필요합니다. 감사!C에서 포인터를 통해 구조체 내의 변수에 값 지정

Item.h :

#include "stdio.h" 
#include "stdlib.h" 

typedef int keyType; 

struct Record 
{ 
    keyType key; 
    int other; 
}; 
typedef struct Record* Item; 

void standInput(Item *A, int n) 
{ 
    int i, input; 
    for(i = 0; i <= n-1; i++) 
    { 
     A[i]->key = 0; 
     printf("%d ", A[i]->key); 
    } 
} 

홈페이지 :

#include "stdio.h" 
#include "stdlib.h" 
#include "Item.h" 

int main() 
{ 
    int n; 
    Item *A; 
    printf("Enter a length for the array: "); 
    scanf("%d", &n); 
    A = (Item*)malloc(n * sizeof(Item)); 
    standInput(A, n); 
    return 0; 
} 
+1

당신은 확실히 그냥'Item'하지'항목 *'이며 : – keety

답변

2

A의 값은 모두 초기화되지 않지만 어쨌든 struct Record 포인터로 사용하고 있습니다. A에 포인터 (구조체가 아닌)를 계속 보유하려면 A이 가리키는 각 항목에 대해 A에 대한 공간을 할당해야합니다.

int main() 
{ 
    int n, i; 
    Item *A; 
    printf("Enter a length for the array: "); 
    scanf("%d", &n); 
    A = (Item*)malloc(n * sizeof(Item)); 
    for(i=0; i<n; i++){ 
     A[i] = (Item)malloc(sizeof(struct Record)); 
    } 
    standInput(A, n); 
    return 0; 
} 
+0

Hobbs : 고마워요! 나는 결코 그것을 얻지 못했지만 완벽하게 작동했습니다. –

2

Item 것을 이미 포인터입니다!

A = (Item)malloc(n * sizeof(struct Record)); 

참고 :

당신은이 아닌 포인터, 구조체을위한 공간을 할당 할 필요가 포인터에 대한 형식 정의가 당신을 혼동하는 경우, 사용하지 마십시오)

A[i]->keyA[i]을 의미합니다 포인터이지만 배열을 할당 했으므로 A[i].key을 사용하십시오.

참고 : 그에 따라 A 유형을 변경해야합니다.

2 해결 방법 : A [i]를 될 수있는 포인터를 원하는 경우, 당신은 (루프) 각 포인터, (지금처럼)을위한 공간을 할당 포인터를위한 공간을 할당 주먹이 구조체.

+0

이것이 문제가 아닌지 확실하지 않습니다. standInput 함수는 Item 포인터를 받아들이고 A는 Item *으로 선언됩니다. 내가 잘못? – Aslan986

+0

문제를 어떻게 해결할 것인가에 달려 있습니다. 요소의 연속 배열 또는 포인터의 배열? –

0

귀하의 구조 이름은 Record이 아니며 Item입니다. 따라서 sizeof(struct Record)을 사용해야합니다.

+0

감사합니다. sizeof (구조체 레코드)를 사용하도록 전환했지만 여전히 동일한 문제가 발생합니다. –

+0

나는 당신이 당신의 코드가 원하는 것을 이해하는지 모르겠다. "Item"의 배열을 만들고 있습니까? – Aslan986

+0

그래요. 할당은 구조체 레코드에 대한 포인터 인 Item의 배열을 요청했습니다. 솔직히 저는 강사의 의사 소통 기술이 최고가 아니기 때문에 조금 혼란 스럽지만 C에서 Robert Sedgewick의 책 Algorithms에서 함께 풀어 봤습니다. –

0

은 이런 식으로합니까?
관련 문제