2013-09-18 4 views
-4

Я написал эту программу, и я хочу знать, правильно это или нет? Что произойдет в этом массиве pInt?Массив указателей и указатель на массив указателей 3

#include <iostream> 
using namespace std; 

int main(int argc, char*argv[]) 
{ 
    system("color 1f"); 

    int **pInt=new int*[2]; 
    int i=0,j=0; 
    pInt[0]=new int[4]; 
    pInt[1]=new int[7]; 

    for(i=0;i<2;i++) 
    { 
     for(j=0;j<7;j++) 
     { 
      pInt[i][j]=i+j;  
     } 
    } 

    for(i=0;i<2;i++) 
     for(j=0;j<7;j++) 
      cout<<"pInt["<<i<<"]["<<j<<"]= "<<pInt[i][j]<<endl; 

    cout.write("\n\n\n\n\n",5); 
    return 0; 
} 
+1

Массив указателей на 'int' является' int * arr [N]; '. Указателем на массив указателей на 'int' является' int * (* arr) [N]; '. Я не вижу ни того, ни другого. – chris

+1

ваш первый цикл 'for' будет сжиматься, так как' pInt [0] [x] 'определяется только для' x e N | х <4'. поэтому 'pInt [0] [4]' будет первым «OutOfArrayBounds-Exception» .... а второй тоже – TheOneAndOnly

+0

@ TheOneAndOnly какое исключение? У C++ нет проверки границ ... – Manu343726

ответ

2

В ваших циклах я добавил небольшое условие для проверки индекса массива. Теперь программа работает нормально. попробуй это сейчас!

#include <iostream> 
using namespace std; 

int main(int argc, char*argv[]) 
{ 
    system("color 1f"); 

    int **pInt=new int*[2]; 
    int i=0,j=0; 
    pInt[0]=new int[4]; 
    pInt[1]=new int[7]; 

    for(i=0;i<2;i++) 
     for(j=0;j<(i==0?4:7);j++) 
      pInt[i][j]=i+j;  

    for(i=0;i<2;i++) 
     for(j=0;j<(i==0?4:7);j++) 
      cout<<"pInt["<<i<<"]["<<j<<"]= "<<pInt[i][j]<<endl; 

    cout.write("\n\n\n\n\n",5); 
    return 0; 
} 
+0

Это прекрасно работает, мой друг. но что это? J <(я == 0 4: 7) ??? и в моей программе он болтается на нераспределенной памяти? (записывая в память contigiuos в массив, но не принадлежащий ему)? – ProDev7

+1

Это тернарный оператор C/C++. если j == 0, то он должен быть первым массивом, return 4 в противном случае возвращает 7 –

+0

ok thanx. Я знаю, что это тройной оператор, но я был немного смущен его использованием в вашей петле. но теперь вместо того, чтобы сделать это ясно – ProDev7

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