logo

C++ İşaretçiler Dizisi

Dizi ve işaretçiler birbirleriyle yakından ilişkilidir. C++'da bir dizinin adı bir işaretçi olarak kabul edilir, yani dizinin adı bir öğenin adresini içerir. C++ dizi adını ilk öğenin adresi olarak kabul eder. Örneğin, bir dizi, yani tamsayı tipinin 20 değerini tutan işaretler oluşturursak, o zaman işaretler ilk elemanın adresini, yani işaretler[0]'ı içerecektir. Dolayısıyla dizi adının (işaretlerinin) dizinin ilk elemanının adresini tutan bir işaretçi olduğunu söyleyebiliriz.

Bu senaryoyu bir örnek üzerinden anlayalım.

 #include using namespace std; int main() { int *ptr; // integer pointer declaration int marks[10]; // marks array declaration std::cout &lt;&lt; &apos;Enter the elements of an array :&apos; &lt;&lt; std::endl; for(int i=0;i&gt;marks[i]; } ptr=marks; // both marks and ptr pointing to the same element.. std::cout &lt;&lt; &apos;The value of *ptr is :&apos; &lt;<*ptr<< std::endl; std::cout << 'the value of *marks is :' <<*marks<<std::endl; } < pre> <p>In the above code, we declare an integer pointer and an array of integer type. We assign the address of marks to the ptr by using the statement ptr=marks; it means that both the variables &apos;marks&apos; and &apos;ptr&apos; point to the same element, i.e., marks[0]. When we try to print the values of *ptr and *marks, then it comes out to be same. Hence, it is proved that the array name stores the address of the first element of an array.</p> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/c-tutorial/74/c-array-pointers.webp" alt="C++ Array of Pointers"> <h3>Array of Pointers</h3> <p>An array of pointers is an array that consists of variables of pointer type, which means that the variable is a pointer addressing to some other element. Suppose we create an array of pointer holding 5 integer pointers; then its declaration would look like:</p> <pre> int *ptr[5]; // array of 5 integer pointer. </pre> <p>In the above declaration, we declare an array of pointer named as ptr, and it allocates 5 integer pointers in memory.</p> <p>The element of an array of a pointer can also be initialized by assigning the address of some other element. Let&apos;s observe this case through an example.</p> <pre> int a; // variable declaration. ptr[2] = &amp;a; </pre> <p>In the above code, we are assigning the address of &apos;a&apos; variable to the third element of an array &apos;ptr&apos;.</p> <p>We can also retrieve the value of &apos;a&apos; be dereferencing the pointer.</p> <pre> *ptr[2]; </pre> <p> <strong>Let&apos;s understand through an example.</strong> </p> <pre> #include using namespace std; int main() { int ptr1[5]; // integer array declaration int *ptr2[5]; // integer array of pointer declaration std::cout &lt;&lt; &apos;Enter five numbers :&apos; &lt;&lt; std::endl; for(int i=0;i&gt; ptr1[i]; } for(int i=0;i<5;i++) { ptr2[i]="&amp;ptr1[i];" } printing the values of ptr1 array std::cout << 'the are' std::endl; for(int i="0;i&lt;5;i++)" *ptr2[i] < pre> <p>In the above code, we declare an array of integer type and an array of integer pointers. We have defined the &apos;for&apos; loop, which iterates through the elements of an array &apos;ptr1&apos;, and on each iteration, the address of element of ptr1 at index &apos;i&apos; gets stored in the ptr2 at index &apos;i&apos;.</p> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/c-tutorial/74/c-array-pointers-2.webp" alt="C++ Array of Pointers"> <p>Till now, we have learnt the array of pointers to an integer. Now, we will see how to create the array of pointers to strings.</p> <h3>Array of Pointer to Strings</h3> <p>An array of pointer to strings is an array of character pointers that holds the address of the first character of a string or we can say the base address of a string.</p> <p>The following are the differences between an array of pointers to string and two-dimensional array of characters:</p> <ul> <li>An array of pointers to string is more efficient than the two-dimensional array of characters in case of memory consumption because an array of pointer to strings consumes less memory than the two-dimensional array of characters to store the strings.</li> <li>In an array of pointers, the manipulation of strings is comparatively easier than in the case of 2d array. We can also easily change the position of the strings by using the pointers.</li> </ul> <p>Let&apos;s see how to declare the array of pointers to string.</p> <p>First, we declare the array of pointer to string:</p> <pre> char *names[5] = {&apos;john&apos;, &apos;Peter&apos;, &apos;Marco&apos;, &apos;Devin&apos;, &apos;Ronan&apos;}; </pre> <p>In the above code, we declared an array of pointer names as &apos;names&apos; of size 5. In the above case, we have done the initialization at the time of declaration, so we do not need to mention the size of the array of a pointer. The above code can be re-written as:</p> <pre> char *names[ ] = {&apos;john&apos;, &apos;Peter&apos;, &apos;Marco&apos;, &apos;Devin&apos;, &apos;Ronan&apos;}; </pre> <p>In the above case, each element of the &apos;names&apos; array is a string literal, and each string literal would hold the base address of the first character of a string. For example, names[0] contains the base address of &apos;john&apos;, names[1] contains the base address of &apos;Peter&apos;, and so on. It is not guaranteed that all the string literals will be stored in the contiguous memory location, but the characters of a string literal are stored in a contiguous memory location.</p> <p> <strong>Let&apos;s create a simple example.</strong> </p> <pre> #include using namespace std; int main() { char *names[5] = {&apos;john&apos;, &apos;Peter&apos;, &apos;Marco&apos;, &apos;Devin&apos;, &apos;Ronan&apos;}; for(int i=0;i<5;i++) { std::cout << names[i] std::endl; } return 0; < pre> <p>In the above code, we have declared an array of char pointer holding 5 string literals, and the first character of each string is holding the base address of the string.</p> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/c-tutorial/74/c-array-pointers-3.webp" alt="C++ Array of Pointers"> <hr></5;i++)></pre></5;i++)></pre></*ptr<<>

Yukarıdaki bildirimde ptr adında bir işaretçi dizisi bildiriyoruz ve bu dizi bellekte 5 tam sayı işaretçisi ayırıyor.

Bir işaretçinin dizisinin öğesi, başka bir öğenin adresi atanarak da başlatılabilir. Bu durumu bir örnek üzerinden inceleyelim.

 int a; // variable declaration. ptr[2] = &amp;a; 

Yukarıdaki kodda 'a' değişkeninin adresini 'ptr' dizisinin üçüncü elemanına atadık.

Ayrıca işaretçinin referansını kaldırarak 'a'nın değerini de alabiliriz.

 *ptr[2]; 

Bir örnek üzerinden anlayalım.

 #include using namespace std; int main() { int ptr1[5]; // integer array declaration int *ptr2[5]; // integer array of pointer declaration std::cout &lt;&lt; &apos;Enter five numbers :&apos; &lt;&lt; std::endl; for(int i=0;i&gt; ptr1[i]; } for(int i=0;i<5;i++) { ptr2[i]="&amp;ptr1[i];" } printing the values of ptr1 array std::cout << \'the are\' std::endl; for(int i="0;i&lt;5;i++)" *ptr2[i] < pre> <p>In the above code, we declare an array of integer type and an array of integer pointers. We have defined the &apos;for&apos; loop, which iterates through the elements of an array &apos;ptr1&apos;, and on each iteration, the address of element of ptr1 at index &apos;i&apos; gets stored in the ptr2 at index &apos;i&apos;.</p> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/c-tutorial/74/c-array-pointers-2.webp" alt="C++ Array of Pointers"> <p>Till now, we have learnt the array of pointers to an integer. Now, we will see how to create the array of pointers to strings.</p> <h3>Array of Pointer to Strings</h3> <p>An array of pointer to strings is an array of character pointers that holds the address of the first character of a string or we can say the base address of a string.</p> <p>The following are the differences between an array of pointers to string and two-dimensional array of characters:</p> <ul> <li>An array of pointers to string is more efficient than the two-dimensional array of characters in case of memory consumption because an array of pointer to strings consumes less memory than the two-dimensional array of characters to store the strings.</li> <li>In an array of pointers, the manipulation of strings is comparatively easier than in the case of 2d array. We can also easily change the position of the strings by using the pointers.</li> </ul> <p>Let&apos;s see how to declare the array of pointers to string.</p> <p>First, we declare the array of pointer to string:</p> <pre> char *names[5] = {&apos;john&apos;, &apos;Peter&apos;, &apos;Marco&apos;, &apos;Devin&apos;, &apos;Ronan&apos;}; </pre> <p>In the above code, we declared an array of pointer names as &apos;names&apos; of size 5. In the above case, we have done the initialization at the time of declaration, so we do not need to mention the size of the array of a pointer. The above code can be re-written as:</p> <pre> char *names[ ] = {&apos;john&apos;, &apos;Peter&apos;, &apos;Marco&apos;, &apos;Devin&apos;, &apos;Ronan&apos;}; </pre> <p>In the above case, each element of the &apos;names&apos; array is a string literal, and each string literal would hold the base address of the first character of a string. For example, names[0] contains the base address of &apos;john&apos;, names[1] contains the base address of &apos;Peter&apos;, and so on. It is not guaranteed that all the string literals will be stored in the contiguous memory location, but the characters of a string literal are stored in a contiguous memory location.</p> <p> <strong>Let&apos;s create a simple example.</strong> </p> <pre> #include using namespace std; int main() { char *names[5] = {&apos;john&apos;, &apos;Peter&apos;, &apos;Marco&apos;, &apos;Devin&apos;, &apos;Ronan&apos;}; for(int i=0;i<5;i++) { std::cout << names[i] std::endl; } return 0; < pre> <p>In the above code, we have declared an array of char pointer holding 5 string literals, and the first character of each string is holding the base address of the string.</p> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/c-tutorial/74/c-array-pointers-3.webp" alt="C++ Array of Pointers"> <hr></5;i++)></pre></5;i++)>

Yukarıdaki kodda, işaretçi adlarından oluşan bir diziyi 5 boyutunda 'isimler' olarak bildirdik. Yukarıdaki durumda, ilklendirmeyi bildirim sırasında yaptık, bu nedenle dizinin boyutundan bahsetmemize gerek yok. Işaretçi. Yukarıdaki kod şu şekilde yeniden yazılabilir:

 char *names[ ] = {&apos;john&apos;, &apos;Peter&apos;, &apos;Marco&apos;, &apos;Devin&apos;, &apos;Ronan&apos;}; 

Yukarıdaki durumda, 'names' dizisinin her öğesi bir dize değişmezidir ve her dize değişmezi, bir dizenin ilk karakterinin temel adresini tutacaktır. Örneğin, adlar[0], 'can'ın temel adresini içerir, adlar[1], 'Peter'ın temel adresini içerir, vb. Tüm dize değişmezlerinin bitişik bellek konumunda saklanacağı garanti edilmez, ancak bir dize değişmezinin karakterleri bitişik bir bellek konumunda depolanır.

Basit bir örnek oluşturalım.

 #include using namespace std; int main() { char *names[5] = {&apos;john&apos;, &apos;Peter&apos;, &apos;Marco&apos;, &apos;Devin&apos;, &apos;Ronan&apos;}; for(int i=0;i<5;i++) { std::cout << names[i] std::endl; } return 0; < pre> <p>In the above code, we have declared an array of char pointer holding 5 string literals, and the first character of each string is holding the base address of the string.</p> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/c-tutorial/74/c-array-pointers-3.webp" alt="C++ Array of Pointers"> <hr></5;i++)>