这是我的以下代码,在我的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]));


}

最佳答案

我想你在找

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个字节。

10-06 05:01