这是我的以下代码,在for循环中,我试图存储由malloc创建的char*内存中的无符号短int。我正在索引这样做,如果可能的话,我想保持这种方式。
但是,在打印尺寸(mymemory [0])时,甚至打印出地址mymemory [0]本身时,似乎正在存储P的整数值,而不是未签名的简短INT。整数本身是正确的,但是字节大小为1,而不是2个,因此不是一个未签名的简短
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 %dn",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
字节进行了前进。