использование указателей для отображения содержимого массива

Я зациклился на том, как использовать указатели для отображения массива. Я могу легко сделать это с помощью массива, использующего for loop, но мне интересно узнать, как использовать его с помощью указателей, и я застрял в том, как рассчитать начальную и конечную точку массива.

Ниже приведен пример программы

void printArray(int *ptr); { //for statement to print values using array for( ptr!=NULL; ptr++) // i know this doesn't work printf("%d", *ptr); } int main() { int array[6] = {2,4,6,8,10}; printArray(array); return 0; } 

Проверка на NULL-трюк работает только для строк с завершающим символом NULL. Для числового массива вам придется пройти и в размере.

 void printArray(int *ptr, size_t length); { //for statement to print values using array size_t i = 0; for( ; i < length; ++i ) printf("%d", ptr[i]); } void printString(const char *ptr); { //for statement to print values using array for( ; *ptr!='\0'; ++ptr) printf("%c", *ptr); } int main() { int array[6] = {2,4,6,8,10}; const char* str = "Hello World!"; printArray(array, 6); printString(str); return 0; } 

У вас есть несколько вариантов:

  • Вы можете передать размер вашего массива в функцию.
  • У вас может быть специальное значение «дозорного» (например, -1 ) в качестве последнего элемента вашего массива; если вы это сделаете, вы должны убедиться, что это значение не может отображаться как часть массива.

Когда массив передается как параметр функции, он затухает в указатель на первый элемент массива, теряя информацию о длине массива. Для обработки массива в функции приема ( printArray ) требуется способ узнать длину массива. Это можно сделать двумя способами:

  • Специальный маркер окончания используется для последнего элемента. Для строк это NULL . В вашем примере это может быть -1 , если это значение никогда не произойдет в реальных данных.
  • Передача параметра длины в printArray .

Это дало бы следующие утверждения:

 //Marker value. for(;*ptr != -1; ++ptr) printf("%d", *ptr); //Length parameter for(int i = 0; i < length; ++i) printf("%d", *(ptr+i)); 

Функция должна знать размер массива. Существует два общих подхода:

  1. Передайте фактический размер функции, например

     void printArray(int *ptr, size_t size) { int *const end = ptr + size; while( ptr < end ) { printf("%d", *ptr++); } } int main() { int array[6] = {2,4,6,8,10}; printArray(array, sizeof(array) / sizeof(array[0]) ); return 0; } 
  2. Явно предоставить элемент (или другой подходящий) контрольного элемента для массива:

     void printArray(int *ptr); { //for statment to print values using array for( *ptr != 0; ptr++) // i know this doesn't work printf("%d", *ptr); } int main() { int array[6] = {2,4,6,8,10, NULL}; printArray(array); return 0; } 

Вот ответ приятель (не проверенный) …

  void printArray(int arr[]); { int *ptr; for(ptr = &arr[0]; ptr <= &arr[5]; ptr++) { if(ptr != null) printf("%d", *ptr); ptr++; // incrementing pointer twice, as there are 'int' values in array which //are of size 2 bytes, so we need to increment it twice.. } } int main() { int array[6] = {2,4,6,8,10}; printArray(array); return 0; }