gpt4 book ai didi

c - 我需要详细解释为什么指针指向 [2],因为我不明白,我认为它指向 [4]

转载 作者:行者123 更新时间:2023-11-30 14:41:05 25 4
gpt4 key购买 nike

我不明白为什么最后一行后的 pshrt 指向 a[2],有人可以详细解释一下吗?

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

void main ()
{
short a[10],*pshrt,shrt;
char *pchar;
int i;
for (i=0;i<10;i++)
a[i]=rand();
//show
for (i=0;i<10;i++)
{
printf("%d\t",a[i]);
}
printf("\n\n");
pchar = (char*)a;
pshrt = (short*)(pchar+4);
printf("%d",*pshrt);
}

最佳答案

a 是一个 short 数组,在您的系统上可能是两个字节。您将该数组的 char * 增加 4,因此向前移动了 4 个字节。由于数组的元素每个都是两个字节,因此向前移动两个字节相当于向前移动两个元素。

我不确定您的代码是否严格合法,因为您将此 char * 别名为 short *。它在技术上可能是合法的,因为底层元素实际上是 short,但如果您将 char * 增加了一个奇数,然后将其转换为 short *,现在您正在进行未对齐的访问。

关于c - 我需要详细解释为什么指针指向 [2],因为我不明白,我认为它指向 [4],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55149719/

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