//intptr_t类型是为指针准备的 1 /* Types for `void *' pointers. */ 2 #if __WORDSIZE == 64 3 # ifndef __intptr_t_defined 4 typedef long int intptr_t; 5 # define __intptr_t_defined 6 # endif 7 typedef unsigned long int uintptr_t; 8 #else 9 # ifndef __intptr_t_define...
因此,就可以发现intptr_t和uintptr_t定义的巧妙之处: 在64位机器上,intptr_t为long int,uintptr_t为unsigned long int。而在非64位机器上,intptr_t为int,uintptr_t为unsigned int。 这样就可以保证intptr_t和uintptr_t的长度与机器的指针长度一致,因此在进行整数与 指针的相互转换时可以用intptr_t进行过渡。
}intmain(){ student *stu; stu =create_student();init_student(stu);//将指针转换为intptr_t类型intptr_thandle = (intptr_t)stu;handle_student(handle);free_student(stu);return0; }
intptr_t、uintptr_t数据类型 intptr_t、uintptr_t数据类型 在64位的机器上,intptr_t和uintptr_t分别是long int、unsigned long int的别名;在32位的机器上,intptr_t和uintptr_t分别是int、unsigned int 的别名。/* Types for `void *' pointers. */ #if __WORDSIZE == 64 # ifndef __intptr_...
intptr_t是一项新发明,它是在64位甚至128位内存地址被设想出来之后创建的。如果您曾经需要将指针转换为...
最近在看nginx源码,看到有一个类型intptr_t,没有见过,google了一下,有人说是指针类型,但是看nginx源码中对该类型变量的使用,好像不是指针类型。 [cpp] view plaincopy static ngx_int_t 667 ngx_get_options(int argc, char *const *argv) 668 { ...
intptr_t 与 long int 有疑问。我观察到递增的内存地址(例如通过手动指针算术)因数据类型而异。例如,递增char指针会将内存地址加1,而递增int指针会将double值加4、8,长双精度数加16等。 一开始我做了这样的事情: char myChar, *pChar; float myFloat, *pFloat; ...
这些类型以 intptr_t 和uintptr_t 形式提供。此外,<inttypes.h> 还提供 intmax_t 和uintmax_t,后两者是可用的最长(以位为单位)带符号整型和无符号整型。使用uintptr_t 类型作为指针的整型而非基本类型,如无符号 long。尽管在 ILP32 和 LP64 数据模型中,无符号 long 与指针的长度相同,但如果使用 uintptr...
C语言指针转换为intptr_t类型 1、前言 今天在看代码时,发现将之一个指针赋值给一个intptr_t类型的变量。由于之前没有见过intptr_t这样数据类型,凭感觉认为intptr_t是int类型的指针。感觉很奇怪,为何要将一个指针这样做呢?如是果断上网查查,发现我的感觉是错误的,所以,任何事情不能凭感觉,要弄清楚来龙去脉。
最近在看代码时,发现了两个之前没见过的数据类型:intptr_t,uintptr_t。这两个数据类型是ISO C99定义的,具体代码在linux平台的/usr/include/stdint.h头文件中。 /* Types for `void *' pointers. */ ...