
C语言链表的问题,高手进来看一下哈!!!!
#include<stdio.h>#include<stdlib.h>structnode{chara;structnode*next;};voidmain(){stru...
#include<stdio.h>
#include<stdlib.h>
struct node
{
char a;
struct node *next;
};
void main()
{
struct node *head,*tail,*p,*q;
head=tail=NULL;
p=(struct node *)malloc(sizeof(struct node));
printf("请从键盘上任意输入一个字符:");
scanf("%c",&p->a);
while(p->a!='0')
{
p->next=NULL;
if(head==NULL)
head=tail=p;
else
{
tail->next=p;
tail=p;
}
p=(struct node *)malloc(sizeof(struct node));
printf("请再次任意输入一个字符:");
scanf("%c",&p->a);
}
q=head;
for(;q!=NULL;q++)
{
printf("%c",q->a);
}
}
任意输入字符,以输入0,为结束标志,然后把整个链表输出!如图,干嘛会出现图中所示结果?????????想不明白!!!! 展开
#include<stdlib.h>
struct node
{
char a;
struct node *next;
};
void main()
{
struct node *head,*tail,*p,*q;
head=tail=NULL;
p=(struct node *)malloc(sizeof(struct node));
printf("请从键盘上任意输入一个字符:");
scanf("%c",&p->a);
while(p->a!='0')
{
p->next=NULL;
if(head==NULL)
head=tail=p;
else
{
tail->next=p;
tail=p;
}
p=(struct node *)malloc(sizeof(struct node));
printf("请再次任意输入一个字符:");
scanf("%c",&p->a);
}
q=head;
for(;q!=NULL;q++)
{
printf("%c",q->a);
}
}
任意输入字符,以输入0,为结束标志,然后把整个链表输出!如图,干嘛会出现图中所示结果?????????想不明白!!!! 展开
3个回答
展开全部
for(;q!=NULL;q++)
链表节点并非顺序储存,指针移动可不能靠++,改成
for(;q!=NULL;q=q->next);
链表节点并非顺序储存,指针移动可不能靠++,改成
for(;q!=NULL;q=q->next);
更多追问追答
追问
大哥,先谢了哈~
问题1:链表节点并非顺序存储是什么意思???我不是很明白诶!
问题2:还有q=q+10是否能代表q指向了链表中的第11个节点????
问题3:如果一个文件中存放的是数组a[10],那么文件类型的指针fp指向该文件,那么fp是否等于a?
问题4:这里fp指向的是文件地址,文件不同于数组,可不是全顺序存在内存里的,+10以后并非在文件内移动指针,而是改变了指针指向的内存位置。这句话是什么意思,我也不是很明白?
追答
答1:链表节点是在内存中随机开辟的空间,利用该空间中存的指针指向下一个节点地址来进行虚拟的连接,所以两个连续的链表节点在物理上可能并不相邻。
答2:不能,q中存的是内存地址,例如42251,这个数字代表内存单元编号,而q+10则表示42261,而该单元可能碰巧为链表中的第11个节点,但更可能不为。
答3:不等于,数组存于内存中,文件中数据保存后存于硬盘中,就算文件被读入内存,其数据也是存在于文件结构体中,fp指针指向的是文件结构体变量的地址,而数组是另一个变量,地址完全不同,就像 a[10]存入b[10],fp指向b[10],难道fp也指向a吗?
答4:文件通常很大,一般不可能全部放入内存,所以在内存中是通过建立对应的FILE结构体变量来存储需要信息,fp指向的是这个结构体变量的地址,所以fp+10其实是fp指向的内存地址改变了,如上面所说42251变成42261,而 文件指针 与 FILE 结构指针其实是不同的概念,不可混淆!要对文件进行操作,都要先调用fopen函数打开文件,而这个函数就会返回一个真正的文件指针回来,这个文件指针才是文件内指针,之后的读写操作都是通过这个指针来进行的,这个指针指向的地址才是硬盘中文件内数据的地址。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询