C 试图通过链表读取数组时获取错误的整数

C 试图通过链表读取数组时获取错误的整数,c,arrays,pointers,struct,linked-list,C,Arrays,Pointers,Struct,Linked List,我一直在尝试创建一个程序,通过链表读取固定数组。每当我运行代码时,程序都会给出一个明显不准确的数字,并且不会遍历数组。对我做错了什么有什么建议吗 #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, 6

我一直在尝试创建一个程序,通过链表读取固定数组。每当我运行代码时,程序都会给出一个明显不准确的数字,并且不会遍历数组。对我做错了什么有什么建议吗

#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;
    }
}
#包括
#包括
结构编号
{
int数组[10];
结构编号*下一步;
};
int main()
{
结构数数组[10]={0,10,20,30,40,50,60,70,80,90};
结构编号*head=0;
结构编号*tail=90;
数组[0]。下一个=&数组[1];
数组[1]。下一个=&数组[2];
数组[2]。下一个=&数组[3];
数组[3]。下一个=&数组[4];
数组[4]。下一个=&数组[5];
数组[5]。下一个=&数组[6];
数组[6]。下一个=&数组[7];
数组[7]。下一个=&数组[8];
数组[8]。下一个=&数组[9];
数组[9]。next=NULL;
printf(“%i”,数组[10]。数组[2]);
结构编号*当前=头部;
while(当前!=NULL)
{
printf(“节点%i包含元素并存储在地址%p\n”,当前->数组[0],当前);
当前=当前->下一步;
}
}

这不起作用的原因是
结构编号的初始值设定项。可以找到有关使用C初始值设定项的更多信息


结构初始值设定项:
结构编号数组[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,相当于
结构编号*head=NULL按原样,您的while循环将永远不会执行。您可以使用
head=array
头=&数组[0]这里


尾部指针:
结构编号*Tail=90

这在VS2015中给出了以下警告-

Warning C4047 'initializing': 'number *' differs in levels of indirection from 'int'
您可以使用
tail=&array[9]这里

打印错误:
printf(“%i”,数组[10]。数组[2])


这是在访问
数组
范围之外的元素。C通常使用基于0的索引,因此对于您的定义
struct number数组[10]
,最大元素是
array[9]
这不起作用的原因是
struct number
的初始值设定项。可以找到有关使用C初始值设定项的更多信息


结构初始值设定项:
结构编号数组[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,相当于
结构编号*head=NULL按原样,您的while循环将永远不会执行。您可以使用
head=array
头=&数组[0]这里


尾部指针:
结构编号*Tail=90

这在VS2015中给出了以下警告-

Warning C4047 'initializing': 'number *' differs in levels of indirection from 'int'
您可以使用
tail=&array[9]这里

打印错误:
printf(“%i”,数组[10]。数组[2])


这是在访问
数组
范围之外的元素。C通常使用基于0的索引,因此对于您的定义
struct number array[10]
,最大元素是
array[9]

struct number array[10]=…
-->这将创建类型为
struct number
的10个元素的数组,而不是初始化
int array[10]结构编号的成员。尝试在打开所有警告的情况下编译程序
-Wall
struct number*tail=90-->将
int
值分配给
struct number*
指针。编译器是否对此发出警告?
struct number数组[10]=…
-->这将创建10个
struct number
类型元素的数组,而不是初始化
int数组[10]结构编号的成员。尝试在打开所有警告的情况下编译程序
-Wall
struct number*tail=90-->将
int
值分配给
struct number*
指针。编译器没有为此发出警告吗?