Другие языки программирования и технологии

Как создать массив указателей на числа? (язык Си)

вопрос задан как минимум не корректно :-))
можно создать массив указателей на объекты определенного типа.
а числа могут быть, например, целыми или дробными и они должны храниться в каких то переменных, у которых есть адрес, который смогут хранить указатели.
Но приблизительно так:
int a,b,c;
int *ptr[ 3 ] = { &a, &b, &c } ;
Михаил Шляпников
Михаил Шляпников
17 777
Лучший ответ
если на чистом С:
#include <stdio.h>
#include <stdlib.h>

/*считается, что тип числа произвольный: char, short, long, float, double, - для примера я выбрал int*/
#define NUMTYPE int*
#define DEF_LEN 4

int main( int argc, char **argv )
{
/*аргумент передается через argv, единственный аргумент, по умолчанию массив длинной 4*/
NUMTYPE *arr;
int len = DEF_LEN;
if ( argc >= 1 )
len = atoi(argv[ 1 ]);
arr = calloc(len, sizeof(NUMTYPE));
/*как то заполняете, помня о том, что всякий созданный объект должен быть уничтожен например
for ( int i = 0; i != len; i++ ) {
arr[ i ]=calloc(1, sizeof(NUMTYPE));
arr[ i ]=...
}

for ( int i = 0; i != len; i++ ) free(arr[ i ]);
*/
/*используете этот массив на свое усмотрение*/
/*освобождаете память из-под массива*/
free(arr);
}

Если вы имели в виду С++:
#include <vector>
#inculde <iostream>
int main()
{
/*опускаю как вы узнаете длину массива, предполагаю, что ввод массива происходит с клавиатуры*/
int num;
vector<int*> intpvec;
for(;;){
std::cin >> num;
if ( num != 0 ) {
int *tmp = new int;
*tmp = num;
intpvec.push_front(tmp);
}
}
/*используете*/
}

На самом деле необязательно чтобы элементы массива имели указателей являлись ссылками на статические элементы, строго говоря это нужно только при передаче данных по ссылке. Любые указатели, в частности возвращенные malloc() и calloc()(new, delete, если речь идет о С++) могут быть размещены в массиве и вполне достаточно для сохранения памяти иметь на них хотя бы одну ссылку (элемент означенного массива) .
Например

int *inparr[] = { NULL, NULL, NULL}
При этом не нужно указывать длину ибо и так ясно что это 3, нет нужды давать сразу ссылки, так как NULL - универсальный указатель, в дальнейшем вы можете сделать так

for ( int i = 0; i < 3; i++ ) inparr[ i ] = calloc( 1, sizeof(int) );

После этого еслы вы выведете значения указателей они будут указывать на некоторые адреса в памяти.
Вова Кузнецов
Вова Кузнецов
5 479