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)

 

 

posted @   taohuaxiaochunfeng  阅读(373)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示

目录导航