با عرض سلام و وقت بخیر خدمت کاربران سایت پی وی لرن ، با یکی دیگر از جلسات دوره کامل آموزش ++C در خدمت شما دوستان هستیم . در بخش قبلی با اشاره گر ها در ++C آشنا شدید، در این جلسه قصد داریم تا به مبحث آرایه ها و اشاره گر ها در ++C بپردازیم.
اشاره گر ها علاوه بر آدرس متغیر ها، می توانند آدرس عناصر آرایه را نیز در خود ذخیره کنند.
کد زیر را در نظر بگیرید:
1 2 3 | int* ptr; int a[5]; ptr = &a[2]; // &a[2] is the address of third element of a[5]. |
فرض کنید که اشاره گر باید به عنصر چهارم یک آرایه اشاره کند، یعنی آدرس چهارمین عنصر آرایه را در خود نگه دارد.
اگر که اشاره گر ptr به سومین عنصر آرایه اشاره کند، ptr + 1 به چهارمین عنصر آرایه اشاره خواهد کرد.
شاید با خود فکر کنید که ptr + 1 آدرس بایت بعدی را برگرداند، اما این درست نیست.
چون اشاره گر به یک int اشاره می کند و از آنجایی که اندازه int معمولا ۴بایت است، ptr + 1 به ۴ بایت بعدی اشاره می کند.
مثال زیر آدرس عناصر آرایه زیر را با استفاده از اشاره گر ها و آرایه ها، نمایش می دهد:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | #include <iostream> using namespace std; int main() { float arr[5]; float *ptr; cout << "Displaying address using arrays: " << endl; for (int i = 0; i < 5; ++i) { cout << "&arr[" << i << "] = " << &arr[i] << endl; } // ptr = &arr[0] ptr = arr; cout<<"\nDisplaying address using pointers: "<< endl; for (int i = 0; i < 5; ++i) { cout << "ptr + " << i << " = "<< ptr + i << endl; } return 0; } |
خروچی به شکل زیر می باشد:
1 2 3 4 5 6 7 8 9 10 11 12 13 | Displaying address using arrays: &arr[0] = 0x7fff5fbff880 &arr[1] = 0x7fff5fbff884 &arr[2] = 0x7fff5fbff888 &arr[3] = 0x7fff5fbff88c &arr[4] = 0x7fff5fbff890 Displaying address using pointers: ptr + 0 = 0x7fff5fbff880 ptr + 1 = 0x7fff5fbff884 ptr + 2 = 0x7fff5fbff888 ptr + 3 = 0x7fff5fbff88c ptr + 4 = 0x7fff5fbff890 |
می توان با استفاده از نام آرایه، مانند اشاره گر ها به عناصر آرایه دسترسی پیدا کرد:
1 2 3 4 5 | int arr[3]; &arr[0] is equivalent to arr &arr[1] is equivalent to arr + 1 &arr[2] is equivalen to arr + 2 |
در مثال زیر با آدرس های عناصر یک آرایه را با نام آرایه همانند اشاره گر ها نمایش می دهیم:
1 2 3 4 5 6 7 8 9 10 11 12 13 | #include <iostream> using namespace std; int main() { float arr[5]; cout<<"Displaying address using pointers notation: "<< endl; for (int i = 0; i < 5; ++i) { cout << arr + i <<endl; } return 0; } |
خروجی به شکل زیر می باشد:
1 2 3 4 5 6 | Displaying address using pointers notation: 0x7fff5fbff8a0 0x7fff5fbff8a4 0x7fff5fbff8a8 0x7fff5fbff8ac 0x7fff5fbff8b0 |
همچنین می توانید مقدار ذخیره شده در آدرس prt + 1 را با استفاده از (ptr + 1)* بدست آورید.
مثال زیر با استفاده از علامت اشاره گر ها، داده ها را درج و نمایش می دهد:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #include <iostream> using namespace std; int main() { float arr[5]; // Inserting data using pointer notation cout << "Enter 5 numbers: "; for (int i = 0; i < 5; ++i) { cin >> *(arr + i) ; } // Displaying data using pointer notation cout << "Displaying data: " << endl; for (int i = 0; i < 5; ++i) { cout << *(arr + i) << endl ; } return 0; } |
خروجی به شکل زیر می باشد:
1 2 3 4 5 6 7 8 9 10 11 | Enter 5 numbers: 2.5 3.5 4.5 5 2 Displaying data: 2.5 3.5 4.5 5 2 |
جلسه آموزش آرایه ها و اشاره گر ها در ++C نیز به پایان رسید.
در جلسه بعد به آموزش اشاره گر ها و توابع در ++C خواهیم پرداخت. با ما همراه باشید.
همچنین می توانید نظرات و سوالات خود را از طریق بخش نظرات سایت با ما در میان بگذارید.
hadis
سلام وقتتون بخیر.
میشه لطفا راهنمایی کنید برای فرستادن ادرس عناصر یک ارایه پویا به یک تابع دیگه به عنوان ارگومان , باید چکار کنم؟
fatemeh
چرا خروجی به صورت هگزا هستش ؟ میشه راجب اون توضیح بدید؟