الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مساعده في مثال حول Reference And Pointer

بدأه سار مع الليل في 5 أكتوبر 2009 · 5 رد · 876 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

اخواني ممكن شرح هذا المثال لو تكرمتم

  1.  
  2. int head=10,tail=5;
  3. int main()
  4. {
  5. int* p=&head;
  6. function(p);
  7. }
  8.  
  9. void function(int *&p)//ممكن شرح كيف يستقبل هذا
  10. {
  11. *p=4;
  12. p=&tail
  13. // problem is solved
  14. }
  15. // اخواني انا مكشلتي هي في هذه الدله
  16. //void function(int *&p)
  17. //ممكن شرح كيف تعمل او ماذا تستقبل
  18.  

49940.jpg
#2

السلام عليكم ...

أخي هذا :

int *&p

يسمى مرجع لمتغير, أي أننا نمرر عنوان المؤشر نفسه إلى الدالة.

تصور أننا أزلنا & من التعريف, فإن ما سيمرر للدالة هو نسخة من المؤشر نفسه, و ليس المؤشر الذي مررناه أصلاً. بمعنى أبسط, إذا مررنا المؤشر نفسه بالمرجع, فسيصبح بإمكاننا فعل أمرين,

الأول, أننا نستطيع تعديل ما يؤشر عليه, و هذا الأمر يتم حتى لو لم نقم بتمريره بالمرجع.

الثاني, أننا نستطيع تعديل المؤشر الممرر نفسه. المؤشر عبارة عن متغير عادي, فلو مررناه بالمرجع أصبح بإمكاننا تعديله كما في حالة المتغيرات العادية.

مالفائدة من هذا الأمر؟ هذا يعتمد على ما تريد فعله. هل تريد فعل شيء معين مثلاً؟

تحياتي...

#3

لم استوعب النظري ياليت على الاقل مثال حتى افهم اخي الغالي

49940.jpg
#4

اولاً عليك ان تعرف مبداء ال pass by reference

#include<iostream>
#include<conio.h>
using namespace std;
int head=10;
void function(int &x)
{
   x=5;

}
int main()
{
	 int p=6;
	 function(p);//p تعدل القيمه المخزنه في 
	 cout<<"p= "<<p;//سوف يطبع  5
	 getch();
}

 

حيناً اذا كان هذا واضح لو عملنا pointer للمتغير p وسميناه ptr_p ونريد ان نعدل قيمه p من خلال داله تأخذ قيمه pointer

وكذلك الامر للبوينتر لتغيير القيمه التي يشير اليها بأستخدام داله

#include<iostream>
#include<conio.h>
using namespace std;
int head=10;
void function(int *&x)
{
   x=&head;
}

int main()
{
	 int p=6;
	 int* ptr_p=&p;//p يشير الى  ptr_p
	 function(ptr_p);
	 cout<<"*ptr_p= "<<*ptr_p;// head يشير الى  ptr_p
	 getch();
}

تم تعديل هذه المشاركة بواسطة Ali Al-Zyoud في 5 أكتوبر 2009 في 23:31

#5

ما الفرق بين

void func(const CString& str)

وتلك

void func(const CString str)

مواضيع متنوعة

#6

مشكووووووووووووورين

انا جهزت داله الترتيب بالموشرات ولكن لم استطع تمرير لها كيف امرر لها لان الموشرات هي دوختني مع انها ممتعه

  1.  
  2. void sort(float* p[],int n)
  3. {float* temp;
  4. for(int i=0;i<n;i++)
  5. for(int j=0;j<n-i;j++)
  6. if(*p[j]>*p[j+1])
  7. {
  8. temp=p[j];
  9. p[j]=p[j+1];
  10. p[j+1]=temp;
  11. }
  12. }//end function
  13.  

49940.jpg

مواضيع مشابهة