2017-11-29 13 views
1

연결된 목록을 통해 고정 배열을 읽는 프로그램을 만들려고했습니다. 코드를 실행할 때마다이 프로그램은 분명히 부정확 한 번호를 제공하고 배열을 반복하지 않습니다. 내가 뭘 잘못하고있어?링크 된 목록을 통해 배열을 읽을 때 정수가 잘못되었습니다.

#include <stdio.h> 
#include <stdlib.h> 

struct number 
{ 
int array[10]; 
struct number *next; 
}; 

int main() 
{ 

    struct number array[10] = {0, 10, 20, 30, 40, 50, 60, 70, 80, 90}; 

    struct number *head = 0; 
    struct number *tail = 90; 

    array[0].next = &array[1]; 
    array[1].next = &array[2]; 
    array[2].next = &array[3]; 
    array[3].next = &array[4]; 
    array[4].next = &array[5]; 
    array[5].next = &array[6]; 
    array[6].next = &array[7]; 
    array[7].next = &array[8]; 
    array[8].next = &array[9]; 
    array[9].next = NULL; 

    printf("%i", array[10].array[2]); 

    struct number *current = head; 
    while(current != NULL) 
    { 
     printf("Node %i contains the element and is stored in address %p\n", current->array[0], current); 
     current = current->next; 
    } 
} 
+1

'struct number array [10] = ...'-> 이것은'struct number '의'int array [10];'멤버를 초기화하는 대신'struct number' 타입의 10 개의 원소 배열을 생성합니다. '-Wall' 모든 경고를 켜고 프로그램을 컴파일 해보십시오. –

+0

'struct number * tail = 90;'->'struct number *'포인터에'int' 값을 대입합니다. Isnt 컴파일러는 이것을 경고하고 있습니까? –

답변

0

이것이 작동하지 않는 이유는 struct number의 초기화 프로그램 때문입니다. C 이니셜 라이저를 사용하는 방법에 대한 자세한 내용은 on the GCC website.

구조체 이니셜 찾을 수 있습니다

: struct number array[10] = {0, 10, 20, 30, 40, 50, 60, 70, 80, 90};

이것은

struct number array[10]; 
array[0].array = {0, 10, 20, 30, 40, 50, 60, 70, 80, 90}; 

헤드 포인터로 평가되는 구조체를 초기화 모호한 방법입니다

struct number *head = 0; ... struct number *current = head; while(current != NULL) 

첫 번째 줄, struct number *head = 0;struct number *head = NULL;과 같습니다. 마찬가지로 while 루프는 실행되지 않습니다. 여기서 head = array; 또는 head = &array[0];을 사용할 수 있습니다.

테일 포인터 : -

Warning C4047 'initializing': 'number *' differs in levels of indirection from 'int' 

현재 tail = &array[9];를 사용할 수struct number *tail = 90;

이 VS2015에서 다음과 같은 경고를 제공합니다.

인쇄 오류 :printf("%i", array[10].array[2]);

이것은 array의 경계 외부의 요소에 액세스합니다. C는 일반적으로 0 기반 인덱스를 사용하므로 정의가 struct number array[10] 인 경우 최대 요소는 array[9]입니다.