鱼C论坛

 找回密码
 立即注册
查看: 1959|回复: 19

[已解决]typedef int *INTEGER

[复制链接]
发表于 2018-10-13 22:56:34 | 显示全部楼层 |阅读模式

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

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

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

后面的解释 说 将INTEGER 定义为 int* 型 ,我看着不理解,这部明明是把 int 换个 别名 *INTEGER 吗
那不就是说     *INTEGER 整体 是要定义 整形数据的 ,通过解引用,那 INTEGER 不就是 整形数据的地址吗,图片怎么说它是指针了,指针的作用是指向一个地址,或者说变量里存放的是地。
这让我有点不大明白
最佳答案
2018-10-15 00:39:16
大可爱 发表于 2018-10-15 00:16
看了小甲鱼的视频,我知道 宏定义和typedef 的区别
通过两个例子体现出来,
一个是  不能对typedef 搞 ...
typedef int INT;
typedef int *P_INT;
typedef int ARR[10];
typedef int (*P_ARR)[5];

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

typedef是一个整体,就算是最简单的形式也不应该拆开来看,不应该用#define的思维看typedef
typedef是一个整体,这个整体一同创建一个新类型,不应该拆开来看
826608126.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-10-13 23:09:20 | 显示全部楼层
他那样定义, INTEGER 是整型指针,所以等价于
int *p;
int ** q;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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 是指向整型的指针
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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的指针
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-14 23:25:46 | 显示全部楼层
claws0n 发表于 2018-10-14 23:18
你确定吗?那你怎么解释/分析这个语句?

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

人造人 举得栗子有点大  我只知道 一个typedef 和  函数 其他的头晕
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

你明白了吗?
它们完全不同
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-14 23:46:05 | 显示全部楼层
人造人 发表于 2018-10-14 23:29
不能用#define的思维去理解typedef,它们两个完全不同
它们完全不同
它们完全不同

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


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

使用道具 举报

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

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

typedef int *Integer;   //首先,有分号
type + def ---> 数据类型 + 定义  >> 你去定义一个新的数据类型
大佬给的栗子,你现在不要去学写,看看就好。主要定义的是一个函数指针
typedef int *(*P_Max)(int *, int *);
P_max p_max = Max;    // 数据类型 变量 = xxx;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

???
哪有什么 类型名1 和 类型名2 ?
你指的是什么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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


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

typedef struct Book
{
......
} BOOK, *PBOOK;
BOOK 就是 struct book
*PBOOK 就是指向 struct book 的指针
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2018-10-14 23:53:33 | 显示全部楼层
人造人 发表于 2018-10-14 23:51
???
哪有什么 类型名1 和 类型名2 ?
你指的是什么?

typedef 类型名1 类型名2 啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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 一样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-15 00:05:46 | 显示全部楼层
人造人 发表于 2018-10-14 23:58
typedef 类型名1 类型名2;
创建一个新类型 类型名2,类型名2 的类型和 类型名1 一样
这是typedef的最简 ...

那你的例子 说明
类型名2 的类型和 类型名1 可以不一样咯
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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不和某一个类型一样,是创建的一个新的类型
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 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 可以,但用宏定义就不行
不知道你反复告诉我,它们不同 是指的哪一个,还是说有第三个角度看待他们的不同
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-15 00:17:36 | 显示全部楼层
人造人 发表于 2018-10-15 00:11
这是typedef的最简单形式

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

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

使用道具 举报

发表于 2018-10-15 00:39:16 | 显示全部楼层    本楼为最佳答案   
大可爱 发表于 2018-10-15 00:16
看了小甲鱼的视频,我知道 宏定义和typedef 的区别
通过两个例子体现出来,
一个是  不能对typedef 搞 ...
typedef int INT;
typedef int *P_INT;
typedef int ARR[10];
typedef int (*P_ARR)[5];

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

typedef是一个整体,就算是最简单的形式也不应该拆开来看,不应该用#define的思维看typedef
typedef是一个整体,这个整体一同创建一个新类型,不应该拆开来看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 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 , 就是把特性  扩展为 共性。
可以这样理解吗 。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[10];           // 创建了一个新类型 ARR,ARR是一个数组,数组有10个元素,这10个元素都是int类型的
typedef int (*P_ARR)[5];     // 创建了一个新类型 P_ARR,P_ARR是一个指针,这个指针指向一个数组,这个数组有5个元素,这5个元素都是int类型的

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

有typedef创建的是类型,没有typedef创建的是变量
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-2 18:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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