C++ dasturlash tili Ko'rsatgichlar, referatlar va dinamik xotira ajratish
Download 267.5 Kb.
|
Язык программирования C
- Bu sahifa navigatsiya:
- Размер Массив
- Передача массива входа/выхода функции
Указательная арифметикаКак видно из предыдущего раздела, если является массивом, он рассматривается как указатель, указывающий на первый элемент массива. указывает на следующий , вместо того, чтобы иметь следующий последовательный адрес. Обратите внимание, что an обычно имеет 4 байта. То есть увеличивает адрес на 4 или . Напримерnumbersintint(numbers + 1)intint(numbers + 1)sizeof(int) int numbers[] = {11, 22, 33}; int * iPtr = numbers; cout << iPtr << endl; // 0x22cd30 cout << iPtr + 1 << endl; // 0x22cd34 (increase by 4 - sizeof int) cout << *iPtr << endl; // 11 cout << *(iPtr + 1) << endl; // 22 cout << *iPtr + 1 << endl; // 12 Размер МассивОперация возвращает общее количество байтов массива. Длину (размер) массива можно получить, разделив его на размер элемента (например, элемента 0). Напримерsizeof(arrayName) int numbers[100]; cout << sizeof(numbers) << endl; // Size of entire array in bytes (400) cout << sizeof(numbers[0]) << endl; // Size of first element of the array in bytes (4) cout << "Array size is " << sizeof(numbers) / sizeof(numbers[0]) << endl; // (100) Передача массива входа/выхода функцииМассив передается в функцию в виде указателя на первый элемент массива. Вы можете использовать нотацию массива (например, ) или нотацию указателя (например, ) в объявлении функции. Компилятор всегда обрабатывает его как указатель (например, ). Например, эквивалентны следующие объявления:int[]int*int* int max(int numbers[], int size); int max(int *numbers, int size); int max(int number[50], int size); Они будут рассматриваться компилятором следующим образом. Размер массива, указанный в списке, игнорируется.int*[] int max(int*, int); Array передается в функцию по ссылке, так как вместо клонированной копии передается указатель. Если массив изменяется внутри функции, изменения применяются к копии вызывающего объекта. Вы можете объявить параметр массива так, чтобы предотвратить изменение массива внутри функции.const Размер массива не является частью параметра массива и должен быть передан в другом параметре. Компилятор не может определить размер массива из указателя массива и не выполняет проверку привязки массива.int Пример: Использование обычной нотации массива. /* Passing array in/out function (TestArrayPassing.cpp) */ #include using namespace std; // Function prototypes int max(const int arr[], int size); void replaceByMax(int arr[], int size); void print(const int arr[], int size); int main() { const int SIZE = 4; int numbers[SIZE] = {11, 22, 33, 22}; print(numbers, SIZE); cout << max(numbers, SIZE) << endl; replaceByMax(numbers, SIZE); print(numbers, SIZE); } // Return the maximum value of the given array. // The array is declared const, and cannot be modified inside the function. int max(const int arr[], int size) { int max = arr[0]; for (int i = 1; i < size; ++i) { if (max < arr[i]) max = arr[i]; } return max; } // Replace all elements of the given array by its maximum value // Array is passed by reference. Modify the caller's copy. void replaceByMax(int arr[], int size) { int maxValue = max(arr, size); for (int i = 0; i < size; ++i) { arr[i] = maxValue; } } // Print the array's content void print(const int arr[], int size) { cout << "{"; for (int i = 0; i < size; ++i) { cout << arr[i]; if (i < size - 1) cout << ","; } cout << "}" << endl; } Обратите внимание, что вы можете изменить содержимое массива вызывающего объекта внутри функции, так как массив передается по ссылке. Чтобы предотвратить случайное изменение, вы можете применить квалификатор к параметру функции. Напомним, что сообщите компилятору о том, что значение не должно быть изменено. Например, предположим, что функция печатает содержимое заданного массива и не изменяет массив, можно применить как к имени массива, так и к его размеру, так как они не должны изменяться внутри функции.constconstprint()const void print(const int arr[], int size); Компилятор помечает ошибку «присвоение местоположения только для чтения», если обнаруживает, что значение будет изменено.const Пример: Использование нотации указателя. /* Passing array in/out function using pointer (TestArrayPassingPointer.cpp) */ #include using namespace std; // Function prototype int max(const int *arr, int size); int main() { const int SIZE = 5; int numbers[SIZE] = {10, 20, 90, 76, 22}; cout << max(numbers, SIZE) << endl; } // Return the maximum value of the given array int max(const int *arr, int size) { int max = *arr; for (int i = 1; i < size; ++i) { if (max < *(arr+i)) max = *(arr+i); } return max; } Download 267.5 Kb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling