gpt4 book ai didi

c - 当我将指向 unsigned int 的指针转换为 unsigned long long 指针时,为什么我会看到一个更大的值?

转载 作者:太空宇宙 更新时间:2023-11-04 01:50:29 29 4
gpt4 key购买 nike

下面程序的输出是:

数据:18446721190124690902 892374

数据:892374 892374

当我将变量“a”作为指针传递时发生了什么?我希望这两个函数打印相同的值。

#include <stdio.h>

void func(unsigned long long * dat) {
printf("dat : %llu %u \n",*dat,*dat);
}

void func1(unsigned long long dat) {
printf("dat : %llu %u \n",dat,dat);
}

int main(void)
{
unsigned int a;
a = 892374;
func((unsigned long long *) &a);
func1((unsigned long long) a);
return 0;
}

最佳答案

您遇到了未定义的行为,因为 unsigned int 的大小小于 unsigned long long。就 func 而言,dat 指向的内存长度为 8 个字节,而实际上它只有 4 个字节 - 所以它正在访问包含随机值的额外 4 个字节.对于 printf 的 %u 部分,您将它转换回一个无符号整数,这样它就不会使用额外的 4 个字节,因此您得到了正确的值。

第二个函数可以正常工作,因为它将值转换为 unsigned long long,因此大小差异不是问题。

关于c - 当我将指向 unsigned int 的指针转换为 unsigned long long 指针时,为什么我会看到一个更大的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44155408/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com