大可爱 发表于 2018-10-13 22:56:34

typedef int *INTEGER

本帖最后由 大可爱 于 2018-10-13 23:01 编辑

后面的解释 说 将INTEGER 定义为 int* 型 ,我看着不理解,这部明明是把 int 换个 别名 *INTEGER 吗
那不就是说   *INTEGER 整体 是要定义 整形数据的 ,通过解引用,那 INTEGER 不就是 整形数据的地址吗,图片怎么说它是指针了,指针的作用是指向一个地址,或者说变量里存放的是地。
这让我有点不大明白

claws0n 发表于 2018-10-13 23:09:20

他那样定义, INTEGER 是整型指针,所以等价于
int *p;
int ** q;

人造人 发表于 2018-10-13 23:47:36

不能用#define的思维去理解typedef,它们两个完全不同
不然你要如何理解
typedef int *(*P_Max)(int *, int *);
(*P_Max)(int *, int *)是一个int *
*(*P_Max)(int *, int *)是一个int
???

#include <stdio.h>

typedef int *(*P_Max)(int *, int *);

int *Max(int *a, int *b)
{
        if(*a > *b)
                return a;
        return b;
}

int main(void)
{
        P_Max p_max = Max;
        int a = 100;
        int b = 10;

        int *max = p_max(&a, &b);
        printf("%d\n", *max);

        return 0;
}

claws0n 发表于 2018-10-14 23:18:10

(*P_Max)(int *, int *)是一个int *
*(*P_Max)(int *, int *)是一个int
我觉得是对的
你确定吗?那你怎么解释/分析这个语句?
我就是觉得typedef int *INTEGER   就是将*INTEGER 整体作为int
我的理解就是   &(int) == INTEGER
所以INTEGER是一个数据类型 为 指向整形指针 型数据
呃,基类就那几个,int 家族, float 家族,struct 还有 union。你要那样子去理解也可以
当作是一般的声明就好
typedef int Integer; // Integer 是整型
typedef int * INTEGER; // INTEGER 是指向整型的指针

人造人 发表于 2018-10-14 23:25:04

这个怪我,没有解释清楚
^_^

typedef int *(*P_Max)(int *, int *);
(*P_Max)(int *, int *)不是一个int *
*(*P_Max)(int *, int *)不是一个int

typedef int *(*P_Max)(int *, int *);
P_Max是一个指针,这个指针指向函数,指向的这个函数有两个参数和一个返回值,两个参数都是指针,都是指向int的指针,返回值也是指针,指向int的指针

大可爱 发表于 2018-10-14 23:25:46

claws0n 发表于 2018-10-14 23:18
你确定吗?那你怎么解释/分析这个语句?

呃,基类就那几个,int 家族, float 家族,struct 还有 union ...

人造人 举得栗子有点大我只知道 一个typedef 和函数 其他的头晕

人造人 发表于 2018-10-14 23:29:32

大可爱 发表于 2018-10-14 23:25
人造人 举得栗子有点大我只知道 一个typedef 和函数 其他的头晕

不能用#define的思维去理解typedef,它们两个完全不同
它们完全不同
它们完全不同
它们完全不同

你明白了吗?
它们完全不同

大可爱 发表于 2018-10-14 23:46:05

人造人 发表于 2018-10-14 23:29
不能用#define的思维去理解typedef,它们两个完全不同
它们完全不同
它们完全不同


我记住了。我没有主动犯错,我要干了也只是无意的。
按照你的意思 ,一个事int 一个是 指针,那 类型名1 和 类型名2的作用可以不一样 ?


claws0n 发表于 2018-10-14 23:47:07

大可爱 发表于 2018-10-14 23:25
人造人 举得栗子有点大我只知道 一个typedef 和函数 其他的头晕

那是【天津栗子】,品质特优~{:10_282:}不能用#define的思维去理解typedef,它们两个完全不同
它们完全不同#define N 8
首先没有分号,再来是定义 N = 8,把右边的东西,用中间的变量来缩写。在编译时,编译器是把宏定义里的语句复制到被调用的地方

typedef int *Integer;   //首先,有分号
type + def ---> 数据类型 + 定义>> 你去定义一个新的数据类型
大佬给的栗子,你现在不要去学写,看看就好。主要定义的是一个函数指针
typedef int *(*P_Max)(int *, int *);
P_max p_max = Max;    // 数据类型 变量 = xxx;

人造人 发表于 2018-10-14 23:51:07

大可爱 发表于 2018-10-14 23:46
我记住了。我没有主动犯错,我要干了也只是无意的。
按照你的意思 ,一个事int 一个是 指针,那 类型名1 ...

???
哪有什么 类型名1 和 类型名2 ?
你指的是什么?

claws0n 发表于 2018-10-14 23:52:26

大可爱 发表于 2018-10-14 23:46
我记住了。我没有主动犯错,我要干了也只是无意的。
按照你的意思 ,一个事int 一个是 指针,那 类型名1 ...

你目前先会这个就好,前几天不是接触了结构体?

typedef struct Book
{
......
} BOOK, *PBOOK;
BOOK 就是 struct book
*PBOOK 就是指向 struct book 的指针

大可爱 发表于 2018-10-14 23:53:33

人造人 发表于 2018-10-14 23:51
???
哪有什么 类型名1 和 类型名2 ?
你指的是什么?

typedef 类型名1 类型名2 啊

人造人 发表于 2018-10-14 23:58:07

大可爱 发表于 2018-10-14 23:53
typedef 类型名1 类型名2 啊

typedef 类型名1 类型名2;
创建一个新类型 类型名2,类型名2 的类型和 类型名1 一样
这是typedef的最简单形式

typedef int INT;
创建一个新类型 INT,INT 的类型和 int 一样

大可爱 发表于 2018-10-15 00:05:46

人造人 发表于 2018-10-14 23:58
typedef 类型名1 类型名2;
创建一个新类型 类型名2,类型名2 的类型和 类型名1 一样
这是typedef的最简 ...

那你的例子 说明
类型名2 的类型和 类型名1 可以不一样咯

人造人 发表于 2018-10-15 00:11:55

大可爱 发表于 2018-10-15 00:05
那你的例子 说明
类型名2 的类型和 类型名1 可以不一样咯

这是typedef的最简单形式

像前面的 typedef int *(*P_Max)(int *, int *);
你找不到类型名1和类型名2,这是一个整体,创建一个新的类型P_Max,这个P_Max不和某一个类型一样,是创建的一个新的类型

大可爱 发表于 2018-10-15 00:16:54

人造人 发表于 2018-10-14 23:58
typedef 类型名1 类型名2;
创建一个新类型 类型名2,类型名2 的类型和 类型名1 一样
这是typedef的最简 ...

看了小甲鱼的视频,我知道 宏定义和typedef 的区别
通过两个例子体现出来,
一个是不能对typedef 搞的新的类型 用类型修饰符, 宏定义却可以
第二个是,宏定义只是直接的替换
#include <stdio.h>

typedef int INTEGER, *PTRINT;

int main(void)
{
        INTEGER a = 520;
        PTRINT b, c;

        b = &a;
        c = b;

        printf("addr of a = %p\n", c);

        return 0;
}
这个用typedef 可以,但用宏定义就不行
不知道你反复告诉我,它们不同 是指的哪一个,还是说有第三个角度看待他们的不同

大可爱 发表于 2018-10-15 00:17:36

人造人 发表于 2018-10-15 00:11
这是typedef的最简单形式

像前面的 typedef int *(*P_Max)(int *, int *);


原来如此

人造人 发表于 2018-10-15 00:39:16

大可爱 发表于 2018-10-15 00:16
看了小甲鱼的视频,我知道 宏定义和typedef 的区别
通过两个例子体现出来,
一个是不能对typedef 搞 ...

typedef int INT;
typedef int *P_INT;
typedef int ARR;
typedef int (*P_ARR);


typedef int INT;               // 创建了一个新类型 INT, INT的类型就是int
typedef int *P_INT;            // 创建了一个新类型 P_INT,P_INT的类型是一个指针,这个指针指向int
typedef int ARR;         // 创建了一个新类型 ARR,ARR是一个数组,数组有10个元素,这10个元素都是int类型的
typedef int (*P_ARR);   // 创建了一个新类型 P_ARR,P_ARR是一个指针,这个指针指向一个数组,这个数组有5个元素,这5个元素都是int类型的

typedef是一个整体,就算是最简单的形式也不应该拆开来看,不应该用#define的思维看typedef
typedef是一个整体,这个整体一同创建一个新类型,不应该拆开来看

大可爱 发表于 2018-10-15 08:29:07

人造人 发表于 2018-10-15 00:39
typedef int INT;               // 创建了一个新类型 INT, INT的类型就是int
typedef int *P_IN ...

去掉 typedef ,后面 的INT ,P_INT,ARR,p_ARR   都是变量名
加上 typedef , 就是把特性扩展为 共性。
可以这样理解吗 。

人造人 发表于 2018-10-15 12:52:07

大可爱 发表于 2018-10-15 08:29
去掉 typedef ,后面 的INT ,P_INT,ARR,p_ARR   都是变量名
加上 typedef , 就是把特性扩展为 共性 ...

typedef int INT;               // 创建了一个新类型 INT, INT的类型就是int
typedef int *P_INT;            // 创建了一个新类型 P_INT,P_INT的类型是一个指针,这个指针指向int
typedef int ARR;         // 创建了一个新类型 ARR,ARR是一个数组,数组有10个元素,这10个元素都是int类型的
typedef int (*P_ARR);   // 创建了一个新类型 P_ARR,P_ARR是一个指针,这个指针指向一个数组,这个数组有5个元素,这5个元素都是int类型的

int INT;               // 创建了一个新变量 INT, INT的类型是int
int *P_INT;            // 创建了一个新变量 P_INT,P_INT的类型是一个指针,这个指针指向int
int ARR;         // 创建了一个新变量 ARR,ARR是一个数组,数组有10个元素,这10个元素都是int类型的
int (*P_ARR);   // 创建了一个新变量 P_ARR,P_ARR是一个指针,这个指针指向一个数组,这个数组有5个元素,这5个元素都是int类型的

有typedef创建的是类型,没有typedef创建的是变量
页: [1]
查看完整版本: typedef int *INTEGER