woaini92887 发表于 2014-12-3 12:15:40

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

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

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

}

风之残月 发表于 2014-12-3 12:35:50

这是类型重定义
typedef struct node
{
      int data
    struct node *next
}sqlist,*linklist;

linklist 相当于 struct node *(结构体指针,一种类型),所有用到linklist的地方可以用struct node *代替

Mr.屎壳螂 发表于 2014-12-3 12:48:51

*linklist带了 * 这个符号,这样定义出来的就相当于是指针了,在你的程序中
sqlist *Head; 和 linklist Head; 效果是一样的.
当你把 *linklist 中的 * 去掉之后,他定义的效果就跟 sqlist一样了.

woaini92887 发表于 2014-12-3 12:53:24

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

指针怎么可以去定义一个变量呢

woaini92887 发表于 2014-12-3 12:55:49

风之残月 发表于 2014-12-3 12:35
这是类型重定义




是不是因为有了 typedef 然后把
struct node
{
      int data
    struct node *next
}把这一块代码 命令另一个名叫*linklist

woaini92887 发表于 2014-12-3 12:59:45

风之残月 发表于 2014-12-3 12:35
这是类型重定义




假如没有typedef就是一个指针 linklist就不是代表结构体类型 对吗

Mr.屎壳螂 发表于 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;
A s;
这个样写是合法的,A所定义的s是一个数组.
同样的,
你的定义方法定义
就相当一吧例子中的A换成了 *linklist
用linklist定义出来的就是一个指针.

dxl102586342 发表于 2014-12-3 13:26:43

又一个钻了牛角的人

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

至于类型:
你可以定义int char作为类型,
为什么可以定义组合作为类型,    ----------就当成是打包出售好了!!
好像可以这么理解吧!好像也没有可以纠结的地方啊!

woaini92887 发表于 2014-12-3 14:11:44

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

谢谢拉 我知道我那里想错了 {:5_106:}
还有一小问题 你觉得列子
typedef int A;
A s;
为啥不是这样写A s;
定义说明S 是一个含有4个元素的数组。
如果是A s;
只能说明s是数组 而没说是含有多少个元素的数组

Mr.屎壳螂 发表于 2014-12-3 16:22:39

woaini92887 发表于 2014-12-3 14:11
谢谢拉 我知道我那里想错了
还有一小问题 你觉得列子
typedef int A;


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

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

typedef int A;

int main()
{
        A b;                //这种写法也是错的.
        A c;                  //这种写法才是对的.
        int s={1,2,3,4};    //这种写法是错的,因为只定义了3个元素.
        int a;
        a=0;
        a=1;
        a=2;
        a=3;                           //可以定义a,但是最后输出会出错的.
        printf("%d %d %d %d",a,a,a,a);
        return 0;
}
你可以自己编译,运行试试~

woaini92887 发表于 2014-12-4 13:50:14

Mr.屎壳螂 发表于 2014-12-3 16:22
首先~~少年,A定义的是3个元素,不是四个..虽然第一个数确实是a,但是最后一个是a;你可以试试
.其 ...

恩恩 那个我刚才打错了 是3个
是不是说明C是数组 后面还得赋值呀
比如:
A c;
c[]={1,2,3,4,5};还是说只能定义3个元素跟一样
{:5_105:}想搞清楚一点{:5_96:}

Mr.屎壳螂 发表于 2014-12-4 15:07:57

woaini92887 发表于 2014-12-4 13:50
恩恩 那个我刚才打错了 是3个
是不是说明C是数组 后面还得赋值呀
比如:


那种赋值方法是错的,只能A c={x,x,x};
或者之后c c c一个一个赋值.
A定义的就是三个元素的数组,跟 c的效果一样的.
之后是可以分别写成ccc 的
页: [1]
查看完整版本: 关于链表中定义问题 急!在线等