<div dir="ltr">Hola Marcelinux,<div class="gmail_extra"><br></div><div class="gmail_extra">1. Como ya sabes,
<span style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">sintácticamente</span>
un puntero se define con un astersico y un array con una pareja de corchetes. El "problema" es que estos declaradores siguen las reglas de los operadores. Esto implica que las reglas de precedencia y de asociatividad siguen vigentes. Vemos que el declarador [] tiene mayor precedencia que el declarador *.<br><br>Como queremos un puntero de arrays, debemos obligar que el declarador del puntero se realice antes que el declarador de arrays. Para obligar usamos paréntesis; esto es,</div><div class="gmail_extra"><br></div><div class="gmail_extra">¿? (*ptr)[7];</div><div class="gmail_extra"><br></div><div class="gmail_extra">Luego dice que el tipo de cada elemento del array es un puntero a 'int'. Bien, pues ahora agregamos esta parte:<br><br>
<div class="gmail_extra" style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration-style:initial;text-decoration-color:initial">int * (*ptr)[7];</div></div><div class="gmail_extra"><br></div><div class="gmail_extra">Cuando uno empieza a hacer este tipo de declaraciones complejas, aconsejo usar 'typedef' para aclararnos; esto es,</div><div class="gmail_extra"><br></div><div class="gmail_extra">
<div class="gmail_extra" style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration-style:initial;text-decoration-color:initial"><div class="gmail_extra" style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration-style:initial;text-decoration-color:initial">typedef int * tipo_array_ptr[7];</div></div><br class="gmail-Apple-interchange-newline">
<div class="gmail_extra" style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration-style:initial;text-decoration-color:initial"><div class="gmail_extra" style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration-style:initial;text-decoration-color:initial">
<span style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">
<span style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">tipo_array_ptr</span>
</span>
*ptr;</div></div><br class="gmail-Apple-interchange-newline">
Esto es definitivamente mejor cuando queremos crear memoria dinámicamente usando 'new' o 'new[]'; por ejemplo,</div><div class="gmail_extra"><br></div><div class="gmail_extra">ptr = new <span style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">tipo_array_ptr[100];</span></div><div class="gmail_extra"><br></div><div class="gmail_extra"><br></div><div class="gmail_extra">2. Esto no tiene mucho misterio. Solamente necesitas ir poco a poco:<br><br>array de 8 elementos:<br><br>¿? array[8];<br>
<span style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><br>cada elemento es un array de 7 elementos:</span></div><div class="gmail_extra"><span style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><br></span></div><div class="gmail_extra"><span style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">¿? array[8][7];</span><br></div><div class="gmail_extra"><br><div class="gmail_extra">
<div class="gmail_extra" style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration-style:initial;text-decoration-color:initial"><span style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">que a su vez cada elemento es un puntero a 'int':</span></div><div class="gmail_extra" style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration-style:initial;text-decoration-color:initial"><span style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><br></span></div><div class="gmail_extra" style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration-style:initial;text-decoration-color:initial"><span style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">int * array[8][7];</span><br></div><br class="gmail-Apple-interchange-newline">
<br></div><div class="gmail_extra">Espero haber aclarado las dudas.</div></div><div class="gmail_extra"><br></div><div class="gmail_extra">Steven</div><div class="gmail_extra"><br></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Mar 2, 2018 at 3:59 AM, marcelinux <span dir="ltr"><<a href="mailto:marcelinator@gmail.com" target="_blank">marcelinator@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Después de completar el curso propuesto en esta web me he propuesto complementarlo con el libro de Bjarne Stroustrup, The C++ Programming language.<br>
En el capítulo 5 se proponen unos ejercicios, que transcribo.<br>
Me gustaría saber si los he realizado correctamente.<br>
No se me ocurre cómo serían las dos últimas definiciones. Si alguien pudiera<br>
explicarme cómo deberían ser, le estaría muy agradecido.<br>
<code><br>
/* The C++ Programming language<br>
* Ejercicios del capítulo 5.<br>
*<br>
* ej_01 Write declarations for the following:<br>
* a pointer to a character,<br>
* an array of 10 integers,<br>
* a reference to an array of 10 integers,<br>
* a pointer to an array of character strings,<br>
* a pointer to a pointer to a character,<br>
* a constant integer,<br>
* a pointer to a constant integer<br>
* and a constant pointer to an integer.<br>
* Initialize each one.<br>
*<br>
* ej_03 Use typedef to define the types:<br>
* unsigned char,<br>
* const unsigned char,<br>
* pointer to integer,<br>
* pointer to pointer to char,<br>
* pointer to arrays of char,<br>
* array of 7 pointers to int,<br>
* pointer to an array of 7 pointers to int<br>
* and array of 8 arrays of 7 pointers to int.<br>
*/<br>
<br>
#include iostream<br>
using namespace std;<br>
<br>
void ej_01()<br>
{<br>
char c = 'M';<br>
cout << "char c = " << c << '\n';<br>
<br>
// a pointer to a character<br>
char* pc = &c;<br>
cout << "char* pc = " << pc << " apunta a c = " << *pc << '\n';<br>
<br>
// an array of 10 integers<br>
int arr_i[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 32};<br>
cout << "arr_i[10] ... " << arr_i[0] << '\n';<br>
<br>
// a reference to an array of 10 integers<br>
int (&ref_i)[10] = arr_i;<br>
cout << "ref_i = " << ref_i << " hace referencia a " << ref_i[0] << '\n';<br>
<br>
// a pointer to an array of character strings<br>
char* arr_c[] = {"primero",<br>
"segundo",<br>
"tercero"};<br>
cout << "arr_c[] ... " << arr_c[0] << " .. o .. " << *arr_c << '\n';<br>
<br>
// a pointer to a pointer to a character<br>
char** ppc = arr_c;<br>
cout << "ppc = " << ppc << " que apunta a " << *ppc << '\n';<br>
<br>
// a constant integer<br>
const int ci = 356;<br>
cout << "ci = " << ci << '\n';<br>
<br>
// a pointer to a constant integer<br>
const int* pci = &ci;<br>
cout << "pci = " << pci << " que apunta a " << *pci << '\n';<br>
<br>
// a constant pointer to an integer<br>
int ii = 88;<br>
int *const icons = ⅈ<br>
cout << "icons = " << icons << " que apunta a " << *icons << '\n';<br>
}<br>
<br>
void ej_03()<br>
{<br>
// unsigned char<br>
typedef unsigned char uchar_t;<br>
uchar_t uc = 179;<br>
cout << "unsigned char 179 se representa con " << uc << '\n';<br>
<br>
// const unsigned char<br>
typedef const unsigned char cuchar_t;<br>
cuchar_t cuc = 179;<br>
cout << "const unsigned char 179 se representa con " << cuc << '\n';<br>
<br>
//pointer to integer<br>
typedef int* pint_t;<br>
int i = 6;<br>
pint_t pi = &i;<br>
cout << "pointer to integer sobre i = 6 está en " << pi << " y contiene " << *pi << '\n';<br>
<br>
//pointer to pointer to char<br>
typedef char** ppchar_t;<br>
char ch1 = 'c';<br>
char* pch1 = &ch1;<br>
ppchar_t ppch1 = &pch1;<br>
cout << "pointer to pointer to char está en " << ppch1<br>
<< " y contiene " << *ppch1<br>
<< " que es, a su vez " << **ppch1 << '\n';<br>
<br>
// pointer to arrays of char --->>> es equivalente a pointer to pointer to char<br>
<br>
//array of 7 pointers to int<br>
int i7_1, i7_2, i7_3, i7_4, i7_5, i7_6, i7_7;<br>
i7_7 = i7_6 = i7_5 = i7_4 = i7_3 = i7_2 = i7_1 = 101;<br>
typedef int* pint7_t;<br>
pint7_t i7[7] = {&i7_1, &i7_2, &i7_3, &i7_4, &i7_5, &i7_6, &i7_7};<br>
cout << "array of 7 pointers to int: " << i7[0] << " => " << *i7[0]<br>
<< ", " << i7[1] << " => " << *i7[1]<br>
<< ", " << i7[2] << " => " << *i7[2]<br>
<< ", " << i7[3] << " => " << *i7[3]<br>
<< ", " << i7[4] << " => " << *i7[4]<br>
<< ", " << i7[5] << " => " << *i7[5]<br>
<< ", " << i7[6] << " => " << *i7[6] << '\n';<br>
<br>
//pointer to an array of 7 pointers to int<br>
<br>
//array of 8 arrays of 7 pointers to int<br>
}<br>
<br>
int main()<br>
{<br>
ej_01();<br>
ej_03();<br>
return 0;<br>
}<br>
</code></blockquote><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"> </blockquote></div></div></div>