鱼C论坛

 找回密码
 立即注册
查看: 2290|回复: 8

* 号 typedef 结构体等,不是很懂,求解释!

[复制链接]
发表于 2014-5-19 18:01:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 ZhaoYuBetter 于 2014-5-19 18:09 编辑
typedef struct Node{
        ElemType data;                
        struct Node *next;        
} Node;                                             
问题1:变量名跟结构体名字一样,好奇怪         
问题2:这里的Node到底指什么?LinkList为什么加 * 号,下行代码求大神详细解释!
typedef struct Node *LinkList;   

/* 初始化顺序线性表 */
 问题3:这里传参数 *L 为什么要个 *?下面方法又不加 *;                       
Status InitList(LinkList *L){ 
    *L=(LinkList)malloc(sizeof(Node)); 
    if(!(*L)) {
        return ERROR;
    }
    (*L)->next=NULL; 
    return OK;
}

问题4:这里L没有加 *, 但是访问其成员可使用”->“,而不是用”.“
用”.“ 报错,修改成*L,也是报错
int ListLength(LinkList L){
    int i=0;
    LinkList p=L->next; 
    while(p) {
        i++;
        p=p->next;
    }
    return i;
}
以上4个问题,搞不清楚,请鱼油,帮帮解决,万分感谢!


以上4个问题,搞不清楚,请鱼油,帮帮解决,万分感谢!

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-5-19 20:12:39 | 显示全部楼层
首先:会员居然没鱼币,太小气了!
其次:你需要权威答案:
1.png
2.png
3.png

评分

参与人数 1鱼币 +2 收起 理由
ZhaoYuBetter + 2 热爱鱼C^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-19 21:46:53 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-5-20 18:34:31 | 显示全部楼层
问题一个人观点:结构变量并不分配地址 只是标示  结构体变量名才会分配内存空间
问题二个人观点:用LinkList定义一个变量是 如 LinkList L时  相当于struct Node *L,L是一个指向一个LinkList结构的变量,同时问题四也就解决了
问题三个人观点:用LinkList *L定义的*L  等同于struct Node **L  L是一个指向指针的指针。

评分

参与人数 1鱼币 +2 收起 理由
ZhaoYuBetter + 2

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-5-21 16:39:50 | 显示全部楼层
顶楼上的      画了个图
556.jpg

评分

参与人数 1鱼币 +1 收起 理由
ZhaoYuBetter + 1

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-5-21 18:49:57 | 显示全部楼层
你的代码看着眼熟,是大话数据结构里的吧?
问题一:是C语言历史残留问题,部分纯C的编译器,使用结构体的时候要struct XX a这样用,像问题一那样typedef一下,就可以XX a这样声明了。如果你用的是VS等,默认是用C++编译器编辑这些代码,所以不用加struct,是不是typedef也就无所谓了
问题二:LinkList加了*号就是指针了,这个你得先明白指针为什么会被用在函数参数中,和直接传值有什么区别。
问题三:因为这里要改变指针的值,需要用二级指针才可以。
问题四:好吧,你还是多看看C语言的书籍吧。。。。关于指针你不懂的太多了

评分

参与人数 1鱼币 +2 收起 理由
ZhaoYuBetter + 2 热爱鱼C^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-5-21 20:33:31 | 显示全部楼层
宏定义和别名在windows程序的应用
别名
typedef声明,简称typedef,为现有类型创建一个新的名字,或称为类型别名,在结构体定义,还有一些数组等地方都大量用到。
它有助于创建于平台无关类型,甚至能隐藏复杂和难以理解的语法,使用typedef可编写出更加美观和可读的代码。所谓美观,意指typedef能隐藏笨拙的语法构造以及平台相关的数据类型,从而增强可移植性以及未来的可维护性。
1·类型别名
typedef int size;
size fishc;//声明一个整型变量fishc

2·可以掩饰复合类型,如指针和数组
typedef char arr[81];
arr line;//声明一个大小为81的字符型数组line

typedef char *ptr;
ptr str;//声明一个字符型指针str

3·typedef与结构体结合使用
typedef struct TopMystruct
{
...
}Mystruct;
Mystruct student;//声明一个struct TopMystruct 类型的变量student

宏定义
1·简单的define定义
#define MAXTIME 1000
//编译器在处理代码之前会对MAXTIE进行替换为1000

2·define的“函数定义”
#define max(x,y) (x)>(y)?(x):(y)
//这个定义就会返回两个数中较大的那个。因为这个“函数”没有类型检查,就好像一个函//数模板似的,当然,它绝对没有模板那么安全就是了。

3.1·宏的单行定义
#define A(x)  T_##x
#define B(x)  #@x
#define C(x)  #x
假设x = 1,则有:
A(1) == T_1//直接把x粘贴上去
B(1) == '1'//把x带上单引号后粘贴上去
C(1) =="1"//把x带上双引号后粘贴上去

3.2·define的多行定义
#define  MACRO(arg1,arg2)  do{\
/*declarations*/\
stmt1;\
stmt2;\
/*...*/\
}while(0)/*(notrailing;)*/
关键是换行的时候要加上一个“\”

4·条件编译
在大规模开发,特别是跨平台和系统的软件里,define最终要的功能是条件编译。如下:
#ifdef  WINDOWS
    // 如果 WINDOWS 宏被定义了,就执行这里的内容
#endif

#ifdef  LINUX
    // 如果 LINUX 宏被定义了,执行这里的内容
#else
    // 如果 LINUX 宏没有被定义,执行这里的内容
#endif

在windows编程中的应用
1·定义常量提高可读性
2·灵活替换
3·防止头文件被重复定义
4·重新定义一些类型
5·得到指定地址上的一个字节或字
#define  MEM_B(x)  (*((byte*)(x)))
#define  MEM_W(x)  (*((word*)(x)))

评分

参与人数 1鱼币 +3 收起 理由
ZhaoYuBetter + 3 热爱鱼C^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-24 17:01:57 | 显示全部楼层
浩fly 发表于 2014-5-21 20:33
宏定义和别名在windows程序的应用
别名
typedef声明,简称typedef,为现有类型创建一个新的名字,或称为类 ...

非常感谢你
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-5-24 17:43:27 | 显示全部楼层
oggplay 发表于 2014-5-19 20:12
首先:会员居然没鱼币,太小气了!
其次:你需要权威答案:

aaaaaaaaaaaaaaaaaaaaaaaaaa
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-24 09:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表