typedef int *INTEGER
本帖最后由 大可爱 于 2018-10-13 23:01 编辑后面的解释 说 将INTEGER 定义为 int* 型 ,我看着不理解,这部明明是把 int 换个 别名 *INTEGER 吗
那不就是说 *INTEGER 整体 是要定义 整形数据的 ,通过解引用,那 INTEGER 不就是 整形数据的地址吗,图片怎么说它是指针了,指针的作用是指向一个地址,或者说变量里存放的是地。
这让我有点不大明白
他那样定义, INTEGER 是整型指针,所以等价于
int *p;
int ** q; 不能用#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;
}
(*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 是指向整型的指针 这个怪我,没有解释清楚
^_^
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的指针
claws0n 发表于 2018-10-14 23:18
你确定吗?那你怎么解释/分析这个语句?
呃,基类就那几个,int 家族, float 家族,struct 还有 union ...
人造人 举得栗子有点大我只知道 一个typedef 和函数 其他的头晕 大可爱 发表于 2018-10-14 23:25
人造人 举得栗子有点大我只知道 一个typedef 和函数 其他的头晕
不能用#define的思维去理解typedef,它们两个完全不同
它们完全不同
它们完全不同
它们完全不同
你明白了吗?
它们完全不同
人造人 发表于 2018-10-14 23:29
不能用#define的思维去理解typedef,它们两个完全不同
它们完全不同
它们完全不同
我记住了。我没有主动犯错,我要干了也只是无意的。
按照你的意思 ,一个事int 一个是 指针,那 类型名1 和 类型名2的作用可以不一样 ?
大可爱 发表于 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:46
我记住了。我没有主动犯错,我要干了也只是无意的。
按照你的意思 ,一个事int 一个是 指针,那 类型名1 ...
???
哪有什么 类型名1 和 类型名2 ?
你指的是什么?
大可爱 发表于 2018-10-14 23:46
我记住了。我没有主动犯错,我要干了也只是无意的。
按照你的意思 ,一个事int 一个是 指针,那 类型名1 ...
你目前先会这个就好,前几天不是接触了结构体?
typedef struct Book
{
......
} BOOK, *PBOOK;
BOOK 就是 struct book
*PBOOK 就是指向 struct book 的指针 人造人 发表于 2018-10-14 23:51
???
哪有什么 类型名1 和 类型名2 ?
你指的是什么?
typedef 类型名1 类型名2 啊 大可爱 发表于 2018-10-14 23:53
typedef 类型名1 类型名2 啊
typedef 类型名1 类型名2;
创建一个新类型 类型名2,类型名2 的类型和 类型名1 一样
这是typedef的最简单形式
typedef int INT;
创建一个新类型 INT,INT 的类型和 int 一样
人造人 发表于 2018-10-14 23:58
typedef 类型名1 类型名2;
创建一个新类型 类型名2,类型名2 的类型和 类型名1 一样
这是typedef的最简 ...
那你的例子 说明
类型名2 的类型和 类型名1 可以不一样咯 大可爱 发表于 2018-10-15 00:05
那你的例子 说明
类型名2 的类型和 类型名1 可以不一样咯
这是typedef的最简单形式
像前面的 typedef int *(*P_Max)(int *, int *);
你找不到类型名1和类型名2,这是一个整体,创建一个新的类型P_Max,这个P_Max不和某一个类型一样,是创建的一个新的类型
人造人 发表于 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:11
这是typedef的最简单形式
像前面的 typedef int *(*P_Max)(int *, int *);
原来如此 大可爱 发表于 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 00:39
typedef int INT; // 创建了一个新类型 INT, INT的类型就是int
typedef int *P_IN ...
去掉 typedef ,后面 的INT ,P_INT,ARR,p_ARR 都是变量名
加上 typedef , 就是把特性扩展为 共性。
可以这样理解吗 。
大可爱 发表于 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]