小编Raf*_*tel的帖子

为什么将 Short* 转换为 int* 显示不正确的值

为了更好地了解malloc指针如何在内部工作,我创建了一个short. 在我的系统上,int是 的大小的两倍,因此我创建了另一个类型的short指针并将其地址设置为 的转换值:qint*p

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

int main() {
    short* p = (short*) malloc(2 * sizeof(short));
    int* q = (int*) p;
    
    assert(sizeof *q == 2 * sizeof *p);
    
    p[0] = 0;
    p[1] = 1;
    
    printf("%u\n", *q);
}
Run Code Online (Sandbox Code Playgroud)

当我打印时,它显示的是*q数字,而不是我不明白为什么。如果我理解正确的话,应该表示如下(假设short是2个字节,int是4个字节):655361p

        p[0]                  p[1]
0000 0000 0000 0000 | 0000 0000 0000 0001
Run Code Online (Sandbox Code Playgroud)

因此*q应该读取 4 个字节,从而读取值1。相反,它显示了65536表示为:

0000 0000 …
Run Code Online (Sandbox Code Playgroud)

c pointers

3
推荐指数
1
解决办法
99
查看次数

标签 统计

c ×1

pointers ×1