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

C++, безразмерный массив

Почему так делать нельзя (по крайней мере мой Visual C++ так говорит и не компилит):
int p[];

а, так можно:
int p[] = {100, 20};
p[2] = 400;

Если я например захочу, заполянть массив числами введённые пользователем, то по любому придётся инициализировать хоть одним элементом?
Используйте динамические массивы

int p[]; не компилирует потому что не задано содержимое, и компилятор не может задать размер статическому массиву
int p[] = {100, 20};
p[2] = 400;
Первая строка правильная, а во второй очень серьезная ошибка - массив статический, и записью за пределы массива ты затираешь переменные, находящиеся за ним

Он безразмерный только на этапе задания его содержимого в коде, после компиляции он уже с фиксированными размерами. Читайте про указатели и динамическое выделение памяти. Или если это C++, то про vector
Dzhabrail Allaiev
Dzhabrail Allaiev
12 551
Лучший ответ
Потому что исходно так делать было нельзя, надо было объявлять массивы полностью. Но потом, для удобства программирования, добавили возможность не указывать размер массива, если он сразу заполняется данными (чтобы не надо было по два раза редактировать) .
И так, как ты написал - нельзя, стыдно даже объяснять, почему.
FM
Fuad Memmedov
77 066
Так делать можно, но, честно говоря бесполезно, так как Вы пытаетесь объявить ссылочную переменную-указатель:

#include <iostream>
using namespace std;
int k=1,p[],l=13;
int main()
{
int* r=&k;
cout << *r++ << endl;
cout << *r++ << endl;
return 0;
}

можно сделать так:

#include <iostream>
using namespace std;
const int a=4;
int p[a]={1,2,3,4};
int main()
{
extern int p[];
int j;
for(j=0;j < a;j++) cout<<"p[" << j << "]=" << p[j] << " "; cout << endl;
return 0;
}

но лучше так :

#include <iostream>
using namespace std;
int p[]={1,2,3,4};
int main()
{
int j;
for(j=0;j < sizeof p/sizeof(int);j++) cout<<"p[" << j << "]=" << p[j] << " "; cout << endl;
return 0;
}

или воспользоваться конструкцией языка Си

#include <stdio.h>
void print(int[],int);
int main()
{
int a[4]={1,2,3,4};
print(a,4);
return 0;
}
void print(p,n)
int p[],n;
{
int j;
for(j=0;j < 4;j++) printf("p[%d]=%d ",j,p[j]); printf("\n");
}
Андрей Сычёв
Андрей Сычёв
76 473
Массивы начинаются с нулевого индекса в С и С++!Неужто не знаешь? Вроде уже 4 дня массивы учишь... странно все это. .
Когда объявляешь массив так как у тебя, int p[]={ 100,200};
То длина массива определяется из твоего списка, т. е. Длина аналогична int p[1].
То есть никакой он не безразмерный!
Открой для себя динамические массивы и указатели. Ну хотя бы для того, чтобы понимать как работает vector из STL.
Fail!
S*
Shmel ***
15 002