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*
指针。编译器没有为此发出警告吗?