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