Unit_ptr数据类型的理解
1、相关代码理解
在看代码时,发现有用到 SOCKET
我去找它们的定义,发现有如下定义:
typedef UINT_PTR SOCKET
又去看UINT_PTR,LONG_PTR, LONG_PTR的定义,发现有如下定义:
1 typedef _W64 int INT_PTR, *PINT_PTR;
2 typedef _W64 unsigned int UINT_PTR, *PUINT_PTR;
3
4 typedef _W64 long LONG_PTR, *PLONG_PTR;
5 typedef _W64 unsigned long ULONG_PTR, *PULONG_PTR;
以typedef _W64 int INT_PTR, *PINT_PTR;为例,这里
_W64是编译选项,在64位编译器下, ,而且打开了/Wp64编译选项时,编译器会对使用了__w64的类型进行32位到64位移植性的判断
typedef int INT_PTR => 这里就是为int类型取了一个别名 INT_PTR, 所以这里 INT_PTR就是代表int =》使用 INT_PTR b; b =1;
typedef int *PINT_PTR => 就是为int *,也就是int类型的指针,取了一个别名 PINT_PTR, 所以,这里PINT_PTR就是代表int类型的指针 => 使用 int x = 8; PINT_PTR y = &x;
2、知识扩充
(1)intptr_t 和uintptr_t 类型用来存放指针地址。它们提供了一种可移植且安全的方法声明指针,而且和系统中使用的指针长度相同,对于把指针转化成整数形式来说很有用。
(2)intptr_t是为了跨平台,其长度总是所在平台的位数,所以用来存放地址。
(3)64位机器上指针占8字节,long类型也占8字节,32位机器上指针占用4字节,int类型也占用4字节,所以intptr_t、uintptr_t才这样取别名就是为了能让整数类型与指针互相转换,且注意到为了兼容16位机器,在非64位机器的intptr_t、uintptr_t用int来取别名,而不是long。
3、typedef用法
-
C语言中可以对类型赋新名字
- 语法:
1 typedef Type NewTypeName 2 3 - typedef 并没有创建新类型,只是创建了类型别名
-
定一个0~255数字的数据类型
1 #include <stdio.h> 2 #include<stdlib.h> 3 4 typedef unsigned char byte; 5 6 int main() 7 { 8 byte b = 128; 9 printf("sizeof(byte) = %d\n", sizeof(byte)); 10 printf("b = %d\n",b); 11 12 return 0; 13 }
-
typedef应用
- typedef 可在函数中定义“局部类型名”
- typedef 常用于简化类型名(如 unsigned long long)
- typedef 定义类型名,能够以统一的方式创建变量(Type var)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了