Допустим, у меня есть несколько указателей под названием:
char * pChar;
int * pInt;
Я знаю, что они оба просто хранят адреса памяти, которые указывают на какое-то другое местоположение, и что типы объявляют, на какой объем памяти указывает конкретный указатель. Так, например, char может быть размером байта в системе, а int может быть 4 байта. Так что, когда я делаю:
pChar++; // I am actually incrementing the address pointed to by pChar by 1 byte;
pInt++; // I am actually incrementing the address pointed to by pInt by 4 bytes;
Но что, если я сделаю это:
pChar+2; // increment the address pointed to by pChar by 2 bytes?
pInt+2; // increment the address pointed to by pInt by 2 bytes? what happens to the other two bytes?
Спасибо .. Буду признателен за разъяснения здесь .. Является ли тип указателя просто для операции ++?
РЕДАКТИРОВАТЬ: Таким образом, avp ответил на мой вопрос правильно, но у меня есть дополнительный вопрос, что происходит, когда я делаю:
memcpy(pChar,pInt,2);
Будет ли копировать 2 байта? или 4 байта? Будет ли у меня нарушение прав доступа?
РЕДАКТИРОВАТЬ: Ответ, согласно Райану Фоксу, составляет 2 байта, потому что они приведены к типу (void *). Спасибо! ЗАКРЫТО!
РЕДАКТИРОВАТЬ: Просто для того, чтобы будущие поисковики могли найти это .. Другая часть информации, которую я обнаружил ..
memcpy(pChar+5,pInt+5,2);
не копирует 2 байта блока памяти, на который указывают pInt + 5bytelocations, в pChar + 5bytelocations ... что происходит, когда 2 байта копируются в pChar + 5bytelocations из pInt (4 * 5) байтовых расположений ... неудивительно нарушения доступа, я пытался зачитать где-то, что я не должен был читать ..:)