Надеюсь, это поможет:
int x = 2;
int *ptr = &x; //ptr points to address of x. yes correct.
int y = 3;
&y = ptr + 1; //the address of next integer after x(internally,
// which is ptr) will be set to address of y(this
// won't work.)
в последней строке, если ваше намерение сделать так, чтобы y
стал внутренним хранилищем рядом с x
, этого не произойдет, потому что int y
это объявление о том, что y
будет владельцем данных и не будет перемещать свой адрес. его адрес фиксирован навсегда.
кроме того, это внутренняя память, основанная на вашем коде.
[ 1 byte ] //4 bytes for integer x
[ 1 byte ]
[ 1 byte ]
[ 1 byte ]
[ 1 byte ] //4 bytes for address holder ptr (in 32bit system)
[ 1 byte ]
[ 1 byte ]
[ 1 byte ]
[ 1 byte ] //4 bytes for integer y
[ 1 byte ]
[ 1 byte ]
[ 1 byte ]
вы можете изменить y
через x
, обрабатывая его как массив .
(&x)[2] = 100; //setting 100 to y indirectly.
примечание: это может не работать на разных компиляторах из-за внутренней оптимизации, поэтому это опасный тип кода, если вы используете его в реальных проектах. но вы можете на 100% использовать его для развлечения и исследования. один способ любить программирование больше.
другой безумный пример.
(&x)[1] = 0x123498; //setting any address value to ptr.
(&x)[1] = &y; //setting address of y to ptr.
к вашему первоначальному вопросу (надеюсь, я его понимаю)
Итак, каковы какие еще способы я могу использовать, чтобы иметь возможность создавать свой собственный массив?
, чтобы «создать» свой собственный массив, или, скажем, динамически создавать во время выполнения, вы должны сначала выделить последовательность байтов, которая будет соответствовать массиву нужного вам размера. а затем получить доступ к элементам или любым видам манипуляций с помощью указателя или ссылки.
//---allocate using malloc and free.
int *pIntBuffer = (int*)malloc( 500 * sizeof(int)); //request chunk of memory.
pIntBuffer[10] = 123; //use the array any way you want.
free(pIntBuffer); //be sure to destroy your requested chunk of memory if you don't need it anymore.
//---allocate using new/delete.
int *pAnotherBuff = new int[1000];
pAnotherBuff[900] = *pIntBuffer[10];
delete [] pAnotherBuff;