Как создать указатель на размер массива?
Вот есть такие задание
Написать функцию, которая получает указатель на массив и его размер
И я не понимаю как сделать это указатель на размер массива
Я пытаюсь вот так
#include <iostream>
void RandArr(int*, const int*);
void SumArr(int*, const int*, int*);
void MultArr(int*, const int*, long*);
void OutputArr(int*, const int*);
int main(void) {
const int size5 = 5;
int arr[size5];
long mult = 1;
int sum = 0;
srand(time(0));
RandArr(arr, *size5);
OutputArr(arr, *size5);
SumArr(arr, *size5, &sum);
MultArr(arr, *size5, &mult);
}
void RandArr(int* arr, const int* size) {
//body
}
Пишут что нельзя сохранить в указатель значение а только адрес с значением
А когда пытаюсь так
#include <iostream>
void RandArr(int*, const int*);
void OutputArr(int*, const int*);
int main(void) {
const int size5 = 5;
const int* psize5 = &size5;
int arr[size5];
long mult = 1;
int sum = 0;
srand(time(0));
RandArr(arr, &size5);
OutputArr(arr, &size5);
}
void RandArr(int* arr, const int size) {
for (int i = 0; i < size; i++) {
arr[i] = rand() % 21;
}
}
void OutputArr(int* arr, const int size) {
for (int i = 0; i < size; i++) {
cout<<arr[i] << " ";
}
}
То у меня спецификация прототипов не совпадает со спецификацеией функции также делать указатель на простую целочисленную переменную бессмысленно
И всё таки как же мне тогда создать этот массив и указатель на его размер?
Ответы (3 шт):
... получает
- указатель на массив и
- его размер
Слово "указатель" относится только к слову "массив".
Чтобы получить указатель на переменную надо просто взять адрес этой переменной c помощью оператора &.
void RandArr(int*, const int *);
// ...
const int size = 5; // переменная
const int* size_ptr = &size; // указатель на переменную
int data[size] = {};
RandArr(data, size_ptr); // можно вызывать так
RandArr(&data[0], &size); // так тоже можно вызывать
В вашем коде функция "void RandArr(int*, const int*)" имеет тип второго аргумента константный указатель на int. Когда Вы делаете такой вызов "RandArr(arr, *size5)", то происходит попытка разыменовать целую константу size5. Это не работает, так как size5 - не указатель. Второй вариант Вашего кода имеет разную сигнатуру в объявлении и реализации функции RandArr.
В вашем задании, размер массива не обязательно передавать через указатель. Тогда код будет выглядеть так.
void RandArr(int* arr, const int size) {
for (int i = 0; i < size; i++) {
arr[i] = rand() % 21;
}
}
// ......
const int size = 5;
int data[size] = {};
RandArr(data, size);
У вас стандартная задача по передаче массива в функцию. В любой литературе решения описаны. Самый тривиальный — это передача указателя на массив и количества элементов массива.
Например:
int foo(int* buf, int size);