gpt4 book ai didi

代码片段警告 : cast to pointer from integer of different size

转载 作者:行者123 更新时间:2023-11-30 15:33:12 36 4
gpt4 key购买 nike

在下面的代码片段中,我在第 25 行收到此警告 - “警告:从不同大小的整数转换为指针”这是我执行的第三个 printf,

printf("value of a thru struct ptr=%d\n",(unsigned char *)m_arr(ptr_ns_type)[0]);

我不明白这个警告,因为我在第二个 printf 中做了同样的事情(除了不使用宏)

printf("value of a thru ptr=%d\n",(unsigned char)*ptr);

我没有收到任何错误。谁能帮我理解这个警告吗?

谢谢,巴德里。

#include<stdio.h>
struct ns
{
int i;
unsigned char a[2];
};
#define m_arr(whatever) ((struct ns *)whatever)->a
int main()
{
unsigned char arr[2];
unsigned char brr[2];
struct ns ns_type;
struct ns *ptr_ns_type;
arr[0]=192;
arr[1]=168;
brr[0]=172;
brr[1]=188;

ns_type.i=5;
ns_type.a[0]=brr[0];
ptr_ns_type = &ns_type;
unsigned char *ptr=arr;
printf("value of a=%d\n",arr[0]);
printf("value of a thru ptr=%d\n",(unsigned char)*ptr);
printf("value of a thru struct ptr=%d\n",(unsigned char *)m_arr(ptr_ns_type)[0]);
return 0;
}

最佳答案

这里不需要类型转换:

printf("value of a thru ptr=%d\n",(unsigned char)*ptr);

因为ptr是一个指向unsigned char的指针,所以*ptr已经是一个unsigned char

但是,这里:

(unsigned char *)m_arr(ptr_ns_type)[0]

翻译为:

(unsigned char *)((struct ns *)ptr_ns_type)->a[0]

您正在尝试将unsigned char转换为指向unsigned char的指针。我想你想要的是:

((struct ns *)ptr_ns_type)->a[0]

但还要注意,(struct ns *) 转换不是必需的。

关于代码片段警告 : cast to pointer from integer of different size,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23782124/

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