这是我的以下代码,在我的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]));
}
答案 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
个字节