2015-04-09 3 views
1

Я начинаю программировать, и я начинаю привыкать к C/C++. При попытке сделать код, который я нашел в упражнении, я получаю эту ошибку. Если бы кто-то мог помочь, я был бы очень признателен.Неизвестная ошибка в CodeBlocks

float matrx [50][50]; 
float *p; 
p = matrx; 
int i,j; 
for (i=0; i<50; i++) 
    for (j=0; j<50; j++) 
     p[i][j]=0.0; 
printf("%f",p[2][2]); 
return(0); 

отображается ошибка: «ошибка: индексируются значение не является ни массивом, ни указателя, ни вектор.»

+1

Есть ли причина для дополнительного указателя переменной 'p'? Почему бы просто не напечатать 'matrx' напрямую? –

ответ

3

p - указатель на поплавок. Для вашего кода для работы, р должен быть указатель на массив поплавка:

float (*p)[50]; 
    p = matrx; 

Обратите внимание, что float **p; бы неправильно, так как массив не то же самое, как указатель в C, и двумерный массив это не то же самое, что указатель на указатель.

Я предполагаю, что цель упражнения - показать это. В противном случае вы можете просто пропустить p и напрямую использовать matrx.

+0

Спасибо большое !!! – MarkGRT

1

float matrx [50][50] и float *p очень разные вещи. Изменение кода немного работает отлично:

float p[50][50]; 
int i,j; 
for (i=0; i<50; i++) 
    for (j=0; j<50; j++) 
     p[i][j]=0.0; 
printf("%f",p[2][2]); 
return(0); 
+0

Спасибо, отлично работает. – MarkGRT

0

Если у вас есть указатель, как этот

T *p; 

где T некоторый тип, то p[i] где i некоторый индекс является объектом типа T.

Таким образом, по отношению к коду, если вы определили указатель как

float *p; 

затем p[i] уже является объектом типа float, и вы не можете применить к нему оператор подстрочный как p[i][j].

В C++ и C многомерные массивы на самом деле являются одномерными массивами, элементы которых, в свою очередь, являются массивами.

Так что если у вас есть декларация

float matrx [50][50]; 

затем с помощью ЬурейеЕ вы могли бы написать

typedef float T[50]; 

T matric[50]; 

И соответствующий указатель будет выглядеть

T *p = matrix; 

где T, как это следует из typedef - float[50]

Так р указатель на объект этого типа

float (*p)[50]; 

В этом случае вы можете написать

p = matrix; 
+0

Спасибо, большое объяснение. У меня уже был ответ, но в любом случае вы очень помогли. – MarkGRT

Смежные вопросы