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

سوال في Pointer

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

السلام عليكم

ممكن توضيح الملاحظات التاليه

1-هل هذه المصفوفتان متساويتان ويقومان بنفس العمل ام يوجد اختلاف

  1.  

  2. char x[5][3]==char* x[5];
  3.  

2-ممكن شرح هذه الفصل لاني اواجة فية غموض ممكن مساعدتي اخواني جزاكم الله خير

pointer1.jpg

3-ممكن شرح هذا المثال لا اعلم الى ماذا يريد ان يصل ماهي فكرتة

pointer2p.jpg

هذا هو الغموض الذي واجهتة في المؤشرات لحد الان

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

49940.jpg
#2
#include<iostream>
#include<conio.h>
using namespace std;
char a='a';
void main(){
   char* x[5];//هنا أنشأت خمس مؤشرات (مصفوفه من المؤشرات)ز
   x[0]="aaaaaaa";//المؤشر الاول
   x[1]=&a;//المؤشر الثاني
   x[2]="ccccccccccc";//المؤشر الثالث
   x[3]="dddddddddddd";//المؤشر الرابع
   x[4]='\0';//المؤشر الخامس
   //كما ترى ان ما عملناه هو عمل خمس مؤشرات فقط
	getch();
}

اما الطريقه الثانيه هي فقط مصفوفه ثنائيه البعد [5][2]X

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

#3

اخي الغالي مشكوووووور وجزاك الله الف خيررر

#include<iostream>
#include<conio.h>
using namespace std;
void main(){
char x[5][20];//اخي الغالي هذه مصفوفه من نوع حرف  وتتكون من خمسه اسما طول كل اسم عشرون حرف 
//اخي الغالي اذا انا اريد ان ادخل خمسه اسماء ولكن لا اعلم طول الاسم الذي سوف ادخله لوكان طول الاسم سبعه احرف سوف يكون هناك  13 حرف فارغ وهذا يستهلك الذاكره 
لذلك سوال هو كيف اكون حجز ديناميكي لطول الاسم
انا محاولتي كتالي
char* x[5];
 هذه خمسة مؤشرات  هي تحتوي خمسه اسماء ولكن كم طول كل اسم هل هو ديناميكي 


ارجو اخي انت تفهم ماهو قصدي حتى تفيديني 
المصفوفه التاليه
char x[5][20];
اخي الغالي هذه مصفوفه من نوع حرف  وتتكون من خمسه اسما طول كل اسم عشرون حرف 
المؤشر التالي
char* x[5];
هذا الموشر يحتوي على خمسة اسما او صفوف ولكن كم طول الاسم او كم عدد الاعمده هل هو ديناميكي
ام يجب ان اكتب 
char*[5][20]
ولكن هنا سوف يكون عدد الاعمده ثابت ولا اعرف هل الاسم اصغر او اكبر من الاعمده

ارجوووووووووو افادتي اخواني 




}
49940.jpg
#4

ولتتعلم مفهوم x** و x* اليك مثال

#include<iostream>
#include<conio.h>
using namespace std;
char a='a';
void main(){
	int x[2]={0,0};
   int *x_ptr;// الى متغير مؤشر
   int **xptr_ptr;//مؤشر الى المؤشر
   x_ptr=&x[0];//x[0]يشير الى موقع x_ptr
   (*x_ptr)=1;//الى 1 x[0]غيرنا قيمه 
   cout<<"x[0]="<<x[0]<<" x[1]="<<x[1]<<endl;
   /*  x[0]=1  x[1]=0 */
   xptr_ptr=&x_ptr;
   (*xptr_ptr)++;// x[1]الى x_ptr غيرنا مكان المؤشر 
   (*x_ptr)=9;//الى 9 x[1]غيرنا قيمه 
   cout<<"x[0]="<<x[0]<<" x[1]="<<x[1]<<endl;
   /*  x[0]=1  x[1]=9 */
   getch();
}

وعن سؤالك :

حسناً ان [5]int *x هي خمس مؤشرات اي ان طول كل مؤشر ديناميكي وليس ثابت انت فقط عرفت خمس مؤشرات وليس مصفوفه ثنائيه البعد

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

#5

وهاذا مثال على الطول للمؤشرات :

#include<iostream>
#include<stdio.h>
#include<conio.h>
using namespace std;
char a='a';
void main(){
   char* x[2];
   x[0]="aaaaaaa";
   x[1]=&a; 
   cout<<strlen(x[0])<<endl;//طول المؤشر الاول
   /*  7  */
   cout<<strlen(x[1])<<endl;//طول المؤشر الثاني
   /*  1  */
	getch();
}
#6

الله عليك اخي الغالي Ali Al-Zyoud

والله لقد كان جوابك على الجرح لقد اعطيتني دافع اواصل في المؤشرات الان احس انني استمتع مع المؤشرات كثيررررررررر وانت السبب اخي

بارك الله فيك

ماذا اقول لك لا اعرف كيف اشكرك

انا سوف اوصل تقدمي في المؤشرات واذا واجهت شي سوف اكتبة لك اخي

شكررررررررررررررررررررر مليووووووووووووون مره لك وجزاك الله الف خيررررررررر

وحتى افهم المؤشرات لازم افهم المرجعيات او الاشارات

هناك استفسار في المرجعيات او الاشارات؟؟؟؟؟

1-تحمل عناوين ثابتة لا تتغير ::ممكن توضيح هذه النقطة::

2-حجمها ثابت ويحدده عند تهيئتها:: ممكن توضيح هذه النقطة كمان::

49940.jpg
#7

لا شكر على واجب يا صديقي العزيز وهذا واجبنا مع بعض.

ولكني بصراحه لم افهم السؤالين تماماً ارجو منك ان توضح ماذا قصدت بهما ؟

ماذا تقصد بعنوان ثابت لا يتغير ؟؟ هل للمتغير او المؤشر ؟؟ هل تقصد مؤشير يشير الى موقع متغير فهذا سهل ومثلاً

#include<iostream>
#include<stdio.h>
#include<conio.h>
using namespace std;
char a='a';
void main(){
   int i=5,*ptr;
   ptr=&i;// i يشير الى موقع المتغير  ptr
   cout<<*ptr<<endl;//i يطبع القيمه في الموجوده في موقع 
   /*   5   */
   *ptr=0;//من خلال المؤشرi يمكن تغيير قيمه 
   cout<<i<<endl;
   /*  x=0  */
	getch();
}

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

#8

اخي الغالي مشكوووووور وجزاك الله الف خيررر

اخي الغالي انا لا اقصد المؤشر انا اقصد المرجعيات وهذا تعريفها
int c=5;
int &X=c;//هذا تعريف المرجعيات وسوال عن هذا المرجعيات 
وهذا مثال لها
int c;
c=10;
int &X=c;
cout<<"X="<<X;// is = 10
c=15;
cout<<"X="<<X;// is = 15
والسؤال هنا 
1-تحمل عناوين ثابتة لا تتغير ::ممكن توضيح هذه النقطة::
2-حجمها ثابت ويحدده عند تهيئتها:: ممكن توضيح هذه النقطة كمان::
49940.jpg
#9

حسناً انت تقصد ما يسمى بال References وهي موضوع اخر ولكنها سهل جداً وابسط بكثير من الpointers

عندما تعرف References فيجب ان يتم انشائه بنسبه لمتغير فلا يمكن تعريفه فقط مثل:

int&x;//خطاء غير صحيح

ولكن يعرف بنسبه لمتغير اخر مثل :

int i=0;
	int &x=i;

ولكن ماذا يعني هذا ؟؟؟؟؟

الان ان x هو نفسه i !!!!!!!!!!!!!!!

اي انهما نفس الموقع من الذاكره ولكن هذا الموقع له اسماء اثنين (اسمين لمتغير واحد)

#include<iostream>
#include<stdio.h>
#include<conio.h>
using namespace std; 
void main(){

	int i=0;
	int &x=i;//i هو نفسه  x  الان 

	cout<<&i<<endl;
	/* 0012FF60 */

	cout<<&x<<endl;
	/* 0012FF60 */
	getch();
}

ونفهم من هذا ان ال References لايحتوي بداخله على قيمه موقع i ، ولكنه نفس i , اي ان لهما نفس الموقع بذاكره

اي ان اي تعديل على x هو اصلاً تعديل على i .

اي ان x و i لهما الموقع نفسه بذاكره ولايمكن التعديل على موقع متغير

وانه لايمكن تحديد مكان ال References الافي مرحله الانشاء فقط !!!!!!!

اتمنى ان تكون وضحت الفكره

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

#10

:thumb_up: :thumb_up: :thumb_up: :thumb_up: هذا هو المطلوووب بارك الله فيك ماقصرت كله مفهوووم شكراً لك :thumb_up: :thumb_up: :thumb_up: :thumb_up:

:ty: :ty: :ty:

بصراحه انت لم تخلي عندي اي استفسار كله تمام

تم تعديل هذه المشاركة بواسطة سار مع الليل في 1 أكتوبر 2009 في 23:30

49940.jpg
#11

لاشكر على واجب

وانا دائماً بالخدمه لاي استفسارات عندك

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