C++ dasturlash tili Ko'rsatgichlar, referatlar va dinamik xotira ajratish


Download 267.5 Kb.
bet11/14
Sana20.06.2023
Hajmi267.5 Kb.
#1630767
TuriReferat
1   ...   6   7   8   9   10   11   12   13   14
Bog'liq
Язык программирования C

Указательная арифметика


Как видно из предыдущего раздела, если является массивом, он рассматривается как указатель, указывающий на первый элемент массива. указывает на следующий , вместо того, чтобы иметь следующий последовательный адрес. Обратите внимание, что 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:
1   ...   6   7   8   9   10   11   12   13   14




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling