本文介绍将指针强制转换为 unsigned long long
类型或其他整型的使用方法。
具体使用直接看如下代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct _student_info_
{
char name[32];
int mathScore;
int englishScore;
} TStudentInfo, *PStudentInfo;
TStudentInfo gStudentInfo;
void func(unsigned long long *a)
{
PStudentInfo pStuInfo = &gStudentInfo;
*a = (unsigned long long)pStuInfo; /* 把指针(地址)强转为整型数存到 unsiged long long 类型变量中 */
printf("a = %p, *a = %p, pStuInfo = %p\n", a, *a, pStuInfo); /* 整型数 *a 已经存放了结构体地址 */
}
void func1(unsigned long long a)
{
/* 此处整型数 a 的值为结构体地址,所以使用时直接强转为结构体指针,即可直接访问结构体成员 */
PStudentInfo pStuInfo = (PStudentInfo)a;
printf("&a = %p, a = %p\n", &a, a); /* 此处的 &a 与 main 函数中的 &a 的地址值是不一致的,因为形参是副本 */
printf("name: %s, math score: %d, english score: %d\n", pStuInfo->name, pStuInfo->mathScore, pStuInfo->englishScore);
}
int main(void)
{
unsigned long long a;
strcpy(gStudentInfo.name, "xiaoming");
gStudentInfo.mathScore = 98;
gStudentInfo.englishScore = 100;
func(&a);
printf("&a = %p\n", &a);
func1(a);
return 0;
}
输出:
a = 0x7fff0917fe08, *a = 0x404060, pStuInfo = 0x404060
&a = 0x7fff0917fe08
&a = 0x7fff0917fdd8, a = 0x404060
name: xiaoming, math score: 98, english score: 100