Хранить unsigned short внутри символа *? - PullRequest
0 голосов
/ 15 марта 2019

Вот мой следующий код, в моем цикле for я пытаюсь сохранить unsigned short int внутри памяти char *, созданной malloc.Я делаю это для индексации, и я хотел бы сохранить это, если это возможно.

Однако внутри myMemory при распечатке sizeof (myMemory [0]) или даже распечатывании адреса myMemory [0]Само собой кажется, что сохраняется целочисленное значение p, а не unsigned short 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 %d\n",sizeof(myMemory[2]));

}

1 Ответ

0 голосов
/ 15 марта 2019

Я думаю, что вы ищете

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 байт.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...