鱼C论坛

 找回密码
 立即注册
查看: 1338|回复: 11

关于链表中定义问题 急!在线等

[复制链接]
发表于 2014-12-3 12:15:40 | 显示全部楼层 |阅读模式

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

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

x
给部分代码帮我哦分析下 为什么能用linklist来定义 head=null  和 定义 s  r  linklist不是代表指向结构体的指针吗 怎么成类型了
typedef struct node
{
        int data
    struct node *next
}sqlist,*linklist;

linklist creatlinklist()
{
     linklist head==null;
         linklist s,r;

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

使用道具 举报

发表于 2014-12-3 12:35:50 | 显示全部楼层
这是类型重定义
typedef struct node
{
        int data
    struct node *next
}sqlist,*linklist;

linklist 相当于 struct node *(结构体指针,一种类型),所有用到linklist的地方可以用struct node *代替
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-12-3 12:48:51 | 显示全部楼层
*linklist带了 * 这个符号,这样定义出来的就相当于是指针了,在你的程序中
sqlist *Head; 和 linklist Head; 效果是一样的.
当你把 *linklist 中的 * 去掉之后,他定义的效果就跟 sqlist一样了.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2014-12-3 12:53:24 | 显示全部楼层
Mr.屎壳螂 发表于 2014-12-3 12:48
*linklist带了 * 这个符号,这样定义出来的就相当于是指针了,在你的程序中
sqlist *Head; 和 linklist Hea ...

指针怎么可以去定义一个变量呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-12-3 12:55:49 | 显示全部楼层

是不是因为有了 typedef 然后把
struct node
{
        int data
    struct node *next
}  把这一块代码 命令另一个名叫*linklist
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-12-3 12:59:45 | 显示全部楼层

假如没有typedef  就是一个指针 linklist就不是代表结构体类型 对吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-12-3 13:15:27 | 显示全部楼层
本帖最后由 Mr.屎壳螂 于 2014-12-3 13:26 编辑
woaini92887 发表于 2014-12-3 12:53
指针怎么可以去定义一个变量呢

typedef 是将一个数据类型,定义成另一个名字,可以说就是换个名字,
所以typedef最终定义出来的不是一个指针,更不是一个变量,它是一种数据类型,你说纠结的是*linklist看起来是一个指针,但最后他却可以用来定义一个指针.
然而实际上linklist它就是一个数据类型,而不是指针,
指示在typedef的一种特殊写法,
就像
typedef int A[3];
A s;
这个样写是合法的,A所定义的s是一个数组.
同样的,
你的定义方法定义
就相当一吧例子中的A[3]换成了 *linklist
用linklist定义出来的就是一个指针.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2014-12-3 13:26:43 | 显示全部楼层
又一个钻了牛角的人

linklist *head=null;
感觉应该是这样呀吧, head是一个指向linklist的指针吧;
至于 linklist s,r 这个是定义一个linklist结构体类型的变量

至于类型:
你可以定义int char作为类型,
为什么可以定义组合作为类型,    ----------就当成是打包出售好了!!
好像可以这么理解吧!  好像也没有可以纠结的地方啊!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-12-3 14:11:44 | 显示全部楼层
Mr.屎壳螂 发表于 2014-12-3 13:15
typedef 是将一个数据类型,定义成另一个名字,可以说就是换个名字,
所以typedef最终定义出来的不是一个指 ...

谢谢拉 我知道我那里想错了
还有一小问题 你觉得列子
typedef int A[3];
A s;
为啥不是这样写A[3] s;
定义说明S 是一个含有4个元素的数组。
如果是A s;
只能说明s是数组 而没说是含有多少个元素的数组
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-12-3 16:22:39 | 显示全部楼层
woaini92887 发表于 2014-12-3 14:11
谢谢拉 我知道我那里想错了
还有一小问题 你觉得列子
typedef int A[3];

首先~~少年,A[3]定义的是3个元素,不是四个..虽然第一个数确实是a[0],但是最后一个是a[2];你可以试试
.其次你说的那种定义s的方法也是不合法的.

你卡一看代码
#include<stdio.h>

typedef int A[3];

int main()
{
        A[3] b;                //这种写法也是错的.
        A c;                  //这种写法才是对的.
        int s[3]={1,2,3,4};    //这种写法是错的,因为只定义了3个元素.
        int a[3];
        a[0]=0;
        a[1]=1;
        a[2]=2;
        a[3]=3;                           //可以定义a[3],但是最后输出会出错的.
        printf("%d %d %d %d",a[0],a[1],a[2],a[3]);
        return 0;
}
你可以自己编译,运行试试~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-12-4 13:50:14 | 显示全部楼层
Mr.屎壳螂 发表于 2014-12-3 16:22
首先~~少年,A[3]定义的是3个元素,不是四个..虽然第一个数确实是a[0],但是最后一个是a[2];你可以试试
.其 ...

恩恩 那个我刚才打错了 是3个
是不是说明C是数组 后面还得赋值呀
比如:
A c;
c[]={1,2,3,4,5};还是说只能定义3个元素跟一样
想搞清楚一点
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-12-4 15:07:57 | 显示全部楼层
woaini92887 发表于 2014-12-4 13:50
恩恩 那个我刚才打错了 是3个
是不是说明C是数组 后面还得赋值呀
比如:

那种赋值方法是错的,只能A c={x,x,x};
或者之后c[0] c[1] c[2]一个一个赋值.
A定义的就是三个元素的数组,跟 c[3]的效果一样的.
之后是可以分别写成c[0]  c[1]  c[2] 的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-25 10:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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