将指针强制转换为 `unsigned long long` 类型的使用方法

本文展示了如何在C语言中将指针强制转换为unsignedlonglong类型,并通过该整型变量存储和访问结构体的地址。在函数func中,指针被转换并赋值给unsignedlonglong类型的变量a,然后在func1中,这个整型数值再次转换回指针以直接访问结构体成员。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文介绍将指针强制转换为 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

半砖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值