#include<stdio.h>
#include<malloc.h>
typedef struct stu_tag{
int b;
struct stu_tag *next;
}student;
void main(){
int n=8;
int i;
scanf("%d",&n);
student *head = (student *) malloc(sizeof(student));
student *p1=head;
student *p2;
for(i=0;i<n;++i){
p1->b = i;
p2=(student *) malloc(sizeof(student));
p1->next = p2;
p1=p2;
p2=p2->next;
}
for(i=0;i<n;++i){
printf("%d ",head->b);
head=head->next;
}
}
以上是我随意写的一个程序,大家觉得会成功运行吗?(假如用vc6.0或者vs2005的编译器)
我的话,单单从代码来看,不会有大的问题,当然,先不管动态空间申请是否成功的验证!
但是结果是这样的:当后缀名是C时,编译出错,后缀名为cpp时,编译通过!
更让我不解的是:如果将scanf语句下的三个结构体变量的声明或者初始化,放到scanf语句之前的话,则无论后缀名是什么都能编译通过!代码如下:
#include<stdio.h>
#include<malloc.h>
typedef struct stu_tag{
int b;
struct stu_tag *next;
}student;
void main(){
student *head = (student *) malloc(sizeof(student));
student *p1=head;
student *p2;
int n=8;
int i;
scanf("%d",&n);
for(i=0;i<n;++i){
p1->b = i;
p2=(student *) malloc(sizeof(student));
p1->next = p2;
p1=p2;
p2=p2->next;
}
for(i=0;i<n;++i){
printf("%d ",head->b);
head=head->next;
}
}
甚是不解,小弟在这里默默等候!求解!!!