将未签名的short存储在char *中?

时间:2019-03-15 03:10:35

标签: c memory malloc

这是我的以下代码,在我的for循环中,我试图在malloc创建的char *内存中存储一​​个无符号的short int。我正在为此编制索引,如果可能的话,我希望保持这种方式。

但是,在myMemory内部,当打印出sizeof(myMemory [0])或什至打印出地址myMemory [0]本身时,似乎存储的是p的整数值,而不是无符号的short int。整数本身是正确的,但字节大小为1,而不是2,因此不是无符号的short int。

char* myMemory;
typedef unsigned short int R;
void main(){
R *p:
myMemory = malloc(65536)

for (int i = 0; i<36;i++){
    myMemory[i] = p;
    i++;
    myMemory[i] = p;
    p++;
    p++;
}
printf("testing size of an index %d\n",sizeof(myMemory[2]));

}

1 个答案:

答案 0 :(得分:0)

我认为您正在寻找

char* myMemory = malloc(sizeof(*p) * 36);
for (int i=0; i<36; ++i) {
    memcpy(myMemory+i, p, sizeof(*p));
    i += sizeof(*p);
    ++p;
}

但是您可以简单地使用

char* myMemory = malloc(sizeof(*p) * 36);
memcpy(myMemory, p, sizeof(*p) * 36);
p += 36;

请注意,增加指针会使其前进到下一个元素,因此++p使指针前进了sizeof(*p)个字节,p += 36使指针前进了sizeof(*p) * 36个字节