gpt4 book ai didi

c - 为什么这是指针的输出?

转载 作者:行者123 更新时间:2023-11-30 20:35:35 26 4
gpt4 key购买 nike

我的教科书有一个问题,询问以下代码片段的输出是什么:

#include<stdio.h>

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

选项:

A. 2, 3

B. 2, 0

C. 2、垃圾值(value)

D. 0, 0

根据课本答案是B ,但我很困惑 - 有人可以解释为什么吗?

最佳答案

警告:其中一些内容相当简单。

这是关于内存布局的。当你定义arr时,它是一个int数组,在内存中看起来像这样:

2, 3, 4

但是每个 int 都是(或者更确切地说,可能是,C 有点依赖于平台。)四个 char 长。因此,当将其视为 char 数组时,它看起来像这样:

2, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0

由于 p 的类型为 char *,因此向 p 添加 1 会使指针前进 1,就像在第二个视角中一样。因此你会得到这个输出。

关于c - 为什么这是指针的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38945144/

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