typedef解析

typedef与define的区别

###如下分析:

    define PINT1 int *
    tyedef int *PINT2;

    PINT1 p1,p2;
    PINT2 p3,p4;

请问p1与p2是同一类型吗,p3与p4呢?

    答案是p1与p2不是同一类型;p3与p4是同一类型即指针类型;
    按照下文分解其实际定义结果:
    int *p1;
    int  p2;
    int *p3;
    int *p4;

也就是说,只有typedef才真正拥有自定义变量的能力,当然也包括上面的重命名内建类型(ADT)的能力,尤其是在定义某个比较复杂的自定义类型时,typedef就很方便了:

    typedef int *(*pFunc)(int *, int *);

    pFunc p1;
    int *(*p2)(int *, int *);

p1和p2的类型是一模一样的,你说哪个简单些呢,尤其是需要需要大量定义时

2.typedef改变自建类型增强可移植性
在C语言中,很多自建类型譬如int ,在不同的平台下其自身大小是不一样的,不如16位机器上是16位的,32位机器上是32位的,所以为了解决这个问题就做了很多自定义作为缓冲,譬如:typedef int size_t,尤其是在linux系统中用特别多
3. typedef与结构体的自定义
很多时候当你定义结构体时:

struct student
{
    int age;
    char name;
}


//其实是这样定义的:
typedef struct student
{
    int age;
    char name;
}Stu,*pStu;

那么后面的定义是什么意思呢?

//在使用结构体时:
struct student s1;

//也可以:
Stu s1;
//定义结构体指针
pStu p1;

也就是说在此处typedef的用法就是简化结构体的命名使用,其后面的名字可以和原结构体名字相同:

typedef struct student
{
    int age;
    char name;
}student;

这样也是可以的
4.typedef与const变量
如下代码:

typedef int *PINT;

const PINT p1;

请问此处const常量是指针p1本身还是p1指向的那个变量呢?
很多人会觉得是p1所指向的那个变量,认为是这样的:
const int * p1;
其实不然:

typedef int * PINT;

int main(void)
{
    int a = 5;
    const PINT p1;
    p1 = &a;
    return 0;
}

编译时,编译器报错:error: assignment of read-only variable ‘p1’
p1 = &a;
即p1是const常量不可改变。那么这样呢:

typedef int * PINT;

int main(void)
{
    int a = 5;
    PINT cosnt p1;
    p1 = &a;
    return 0;
}

结果一样,编译器报错。
所以在学习C语言时,凭一己之思考是远远不够的,更多的动手实践,正所谓实践出真知!

`typedef unsigned short` 是一种 C/C++ 中的预处理器指令,用于定义一个新的数据类型名称,并指派给已存在的数据类型。这里的关键词有三个部分:`typedef`、`unsigned` 和 `short`。 - `typedef`: 这是一个关键字,用于创建新的类型别名,使得原本复杂的类型表述变得简洁易读。 - `unsigned`: 这又是一个关键字,表示这个类型的值不允许为负数,所有的位都只用于表示非负整数。在计算机中,无符号数字通常用于处理计数或其他需要正数值的情况。 - `short`: 这里定义了一个字节长度的数据类型。在大多数现代计算机系统中,`short` 类型通常占用两个字节。它的范围是从最低的非负整数 (`0`) 到最大的非负整数 (`65535` 或者 `2^16 - 1`)。 组合起来,`typedef unsigned short` 的作用就是创建一个名为 `unsigned short` 的类型别名,它代表一个无符号的短整型。使用这种方式可以提高代码的可读性和可维护性,特别是当你需要多次使用同样的数据类型定义时。 例子: ```c++ // 使用 typedef 定义 unsigned short 数据类型 typedef unsigned short ushort; int main() { ushort value = 42; // 正确声明了 ushort 类型变量 return 0; } ``` 在这个例子中,我们先通过 `typedef` 创建了一个别名为 `ushort` 的类型,然后可以在程序中像使用 `short` 类型一样使用 `ushort`,但避免了重复写出 `unsigned short` 的繁琐。这不仅让代码更易于理解,同时也减少了可能出现的错误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值