gpt4 book ai didi

c - 从 int* 转换后,我的 char 指针指向无效值

转载 作者:太空狗 更新时间:2023-10-29 16:18:18 26 4
gpt4 key购买 nike

我正在学习 C 编程语言,我刚刚开始学习带指针的数组。我在这个问题上有问题,我希望输出必须是 5 但它是 2,任何人都可以请解释为什么?

int main(){
int arr[] = {1, 2, 3, 4, 5};
char *ptr = (char *) arr;
printf("%d", *(ptr+4));
return 0;
}

最佳答案

假设一个小端架构,其中一个 int 是 32 位(4 字节),int arr[] 的各个字节看起来像这样(最低有效字节在低地址。所有值都是十六进制):

|01 00 00 00|02 00 00 00|03 00 00 00|04 00 00 00|05 00 00 00
char *ptr = (char *) arr;

现在,ptr 指向第一个字节 - 因为您已经转换为 char*,所以它被视为 char 数组:

|1|0|0|0|2|0|0|0|3|0|0|0|4|0|0|0|5|0|0|0
^
+-- ptr

然后,*(ptr+4)访问char数组的第五个元素,返回对应的char值:

|1|0|0|0|2|0|0|0|3|0|0|0|4|0|0|0|5|0|0|0
^
+-- *(ptr + 4) = 2

因此,printf() 打印 2

Big Endian 上系统中,每个 int 中的字节顺序是相反的,导致

|0|0|0|1|0|0|0|2|0|0|0|3|0|0|0|4|0|0|0|5
^
+-- *(ptr + 4) = 0

关于c - 从 int* 转换后,我的 char 指针指向无效值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17423967/

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