利用typedef定义结构体不能编译通过诡异问题

问题描述

今天在利用typedef定义结构体时,顺带定义了结构体的别名,指向结构体的指针变量别名以及结构体数组的别名,但是在程序的执行过程中法相智能是一段一段的执行,全部执行时编译器报错(用的是VS2008),特向高手请教。程序代码如下:#include <stdio.h>#define len 10#define N 5#define null 0typedef struct student{ int age; float total;} person_alias,*pointer_struct_alias,Stu_alias[5];void main(){ /* 1首先是person person_alias p1; //这里person 等价于struct student p1.age=20;p1.total=65.36; printf("p1.age=%d,p1.total=%fn",p1.age,p1.total); */ /* 2然后是定义结构体指针的别名 */ person_alias p2; pointer_struct_alias pointer1; //定义一个指向结构体变量p2 的 指针变量pointer1 pointer1=&p2; pointer1->age=29;pointer1->total=55.32; printf("p2->age=%d,p2->total=%fn",pointer1->age,(*pointer1).total); /*(3) 然后是结构数组的别名*/ Stu_alias Stu; int i=0; pointer_struct_alias pointer2; pointer2=Stu; for(;i<N;i++,pointer2++) { pointer2->age=2*i+2; pointer2->total=1.1*i+60; } printf("结构体数组的数据为n"); for(pointer2=Stu;pointer2<Stu+N;pointer2++) { printf("Age=%d-->total=%fn",pointer2->age,pointer2->total); } system("pause");}经过测试,分别对 1,2,3进行编译时都是能够正确运行的,但是1,2,3段一起编译时就报错,因没有分数,望帮忙。

解决方案

c语言不同于C++的一点是,变量的声明必须位于所有代码段的前面。请参看我写的文章的第七点内容,你就能明白了。http://blog.csdn.net/mougaidong/archive/2010/09/27/5909694.aspx

时间: 2024-09-20 17:14:39

利用typedef定义结构体不能编译通过诡异问题的相关文章

c++ c语言-typedef语句定义结构体数组

问题描述 typedef语句定义结构体数组 你好,请教一下: typedef struct {ElemType data; int cur; }compoent,SLinkList{MAXSIZE}; 代码的作用是什么? 解决方案 struct是结构体,该结构体里有元素类型data,int型cut,typedef是有取别名之义,即将该结构体取名为名compoent,同时也可用SLinkList代表该结构体组,表示共有MAXSIZE个该结构体

typedef struct-C++ 结构体之定义(名称)

问题描述 C++ 结构体之定义(名称) typedef struct _THREAD_CONTEXT { CWorkQueue* pWorkQueue; void* pThreadData; } THREAD_CONTEXT,*PTHREAD_CONTEXT; _THREAD_CONTEXT THREAD_CONTEXT, *PTHREAD_CONTEXT 请问这三个区别以及应用的时候有什么注意的. 解决方案 _THREAD_CONTEXT 是标示符 THREAD_CONTEXT 是结构体类型

在类模版中typedef申明结构体时出错。

问题描述 在类模版中typedef申明结构体时出错. template struct Node { T value; Node* next; }; template typedef struct Node* ptLink; 这里用typedef申明一个模版结构体时报错 error C2823: typedef 模板 非法 error C2998: "Node *ptLink": 不能是模板定义 不知道错在哪里 求大神解答. 解决方案 template struct Node* ptLi

函数体内定义结构体遇到的问题

问题描述 简单描述下我碰到的问题:在函数内部定义结构体,结构体不是放在函数体的最上面,之前还有CString等结构变量.在用容器(vec,set)管理结构体数据时会导致编译器错误.把结构体放到最前面或者函数体外可以解决此问题,但我想弄清楚原因,高手解答,呵呵 解决方案 解决方案二:贴出你的代码看看解决方案三:函数内部定义,只能被本函数使用,解决方案四:1.函数内部定义的局部变量

python中定义结构体的方法_python

Python中没有专门定义结构体的方法,但可以使用class标记定义类来代替结构体,其成员可以在构造函数__init__中定义,具体方法如下. 复制代码 代码如下: class item:    def __init__(self):        self.name = ''     # 名称        self.size = 10     # 尺寸        self.list = []     # 列表 a = item() # 定义结构对象a.name = 'cup'a.size

iOS - OC Struct 结构体

1.结构体的定义与调用 // 定义结构体类型 // 结构体类型名为 MyDate1 struct MyDate1 { int year; int month; int day; }; // 定义结构体类型变量 // 结构体类型变量为 d1,并赋值 struct MyDate1 d1 = {2016, 1, 6}; // 结构体类型变量值的调用 NSLog(@"d1: %d/%d/%d", d1.year, d1.month, d1.day); 2.typedef 定义结构体与调用 //

C++中结构体的类型定义和初始化以及变量引用_C 语言

C++结构体类型的定义和初始化 有时需要将不同类型的数据组合成一个有机的整体,以供用户方便地使用.这些组合在一个整体中的数据是互相联系的.例如,一个学生的学号.姓名.性别.年龄.成绩.家庭地址等项,都是这个学生的属性,见图 可以看到学号(num).姓名(name).性别(sex).年龄(age).成绩(score ).地址(addr)是与姓名为"Li Fun"的学生有关的.如果在程序中将num,name,sex,age,score,addr分别定义为互相独立的变量,就难以反映出它们之间

编程c语言-vs2013中如何定义一个结构体该结构体定义一个结构体数组 结构体数组中包含一个链表

问题描述 vs2013中如何定义一个结构体该结构体定义一个结构体数组 结构体数组中包含一个链表 这样定义对么 编译时报错 缺少:在*前面 这是哪错了啊 请高手指点指点 解决方案 你把两个结构体的定义调换一下次序就没问题啦,要先声明或定义结构体:Station,才能使用 解决方案二: 因为struct Station是在struct Train结构体之后才定义的,所以你要在这之前先声明一下struct Train 解决方案三: 做一个前向声明,或者调换两个结构位置都可以. 解决方案四: 结构体数组

struct-数据结构 树的结构体定义 在线等!!

问题描述 数据结构 树的结构体定义 在线等!! 如图所示 (1)第一行typedef struct node 的那个node 什么时候写 什么时候不写? (2)最后括号外面的 BiNode ,*BiTree 分别是什么作用? 解决方案 (1)node表明的是这个结构体的名字,建议一般都写上,因为如果之后需要用的时候,也可以直接使用这个名字来进行定义,比如说: node nod1: (2)BiNode表示的是用node定义的一个node节点,那么在需要操作这个里面的数据的时候用'.'就能操作,比如