home bbs files messages ]

Forums before death by AOL, social media and spammers... "We can't have nice things"

   comp.lang.c++.moderated      Moderated discussion of C++ superhackery      33,346 messages   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]

   Message 32,567 of 33,346   
   Francis Glassborow to kiran   
   Re: Cannot convert =?windows-1252?Q?=91i   
   26 Sep 12 10:43:19   
   
   From: francis.glassborow@btinternet.com   
      
   On 25/09/2012 21:14, kiran wrote:   
   > Here is a code snippet:   
   > =============   
   > int **ptr;   
   > int intArr[3][5];   
   > ptr = intArr;   
   > =============   
   >   
   > This gives the error on g++ compiler:   
   > error: cannot convert ‘int [3][5]’ to ‘int**’ in assignment   
   >   
   > I have tried other variants as well, like   
   > int const **ptr = intArr;   
   > and   
   > ptr = &intArr[0];   
   >   
   > I still got the same error. Can anyone explain the reason here.   
   >   
   > Thanks,   
   > Kiran   
      
   Others have given you the explanation as to why it fails but you may be   
   interested in why the language works this way.   
      
   Ritchie when designing C wanted to ensure that arrays could be   
   effectively passed to functions and that you did not need a different   
   function for different size arrays (which would have been very   
   cumbersome in a language that did not support overloading). C++ can   
   sidestep this problem by using templates but also maintains backward   
   compatibility with C.   
      
   One of the consequences of Ritchie's design decision was that C only   
   support one dimensional arrays, likewise C++ (though advanced library   
   designers manage multiple dimensions). In addition pointer arithmetic   
   becomes essential (because a function only gets a pointer to an array)   
   and for this to work the compiler must be able to work out the size of   
   the element of the array.   
      
   Given the above, how would you use a T** if it were the address of an   
   array of arrays? You would have no way (unless we required arrays to   
   know their own size as we do for vectors) to compute the addresses of   
   the elements beyond the first row.   
      
   Note that C++ std::vector avoids these constraints because vectors store   
   their current size.   
      
   Francis   
      
      
   --   
         [ See http://www.gotw.ca/resources/clcm.htm for info about ]   
         [ comp.lang.c++.moderated.    First time posters: Do this! ]   
      
   --- SoupGate-Win32 v1.05   
    * Origin: you cannot sedate... all the things you hate (1:229/2)   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]


(c) 1994,  bbs@darkrealms.ca