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

الى محترفين السي

مغلق
بدأه ABDULLAH1003 في 1 أبريل 2003 · 6 رد · 801 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

اريد توضيح بلغة السي عن

pointer to funtion

وهي ان يكون البراميتر funtion

وشكراااااااااا.

#2

مثلا بال C

اذا لدينا متغير في داله main، مثلا

x = 5;

يمكن ان نغير قيمته، مثلا

x = 10;

وهذا بالدال الرئيسيه main

ولايمكن تغيير هذا المتغير في داله اخرى

ولكن مع استخدام ال pointer يمكن تغييرها

يعني مثلا

#include 
void Change_xPointer(int *xptr) {
  *xptr = 20;    /* قيمه اكس هي 20 وستكون بالداله الرئيسيه قيمتها 20 */

   printf("X in Change_xPointer function: %dn",*xptr);
   /* طبع قيمه اكس وهي 20 */
}

void Change_x(int x) {
   x = 30;         /* قيمه اكس هي 30 بهذه الداله فقط، ولكن عندما
                           يرجع المتغير الى الداله الرئيسيه سوف يكون قيمته هي 10 */

   printf("X in Change_x function: %dn",x);   /* طبع قيمه اكس وهي 30 */
}

int main(){
   int x = 5; /* قيمه اكس هي 5 */
   x = 10;    /* قيمه اكس هي 10  */

   Change_x(x);
   printf("X in after calling Change_x function: %dn", x);  /* طبع قيمه اكس وهي 10 */

   Change_xPointer(&x);
   printf("X in after calling Change_xPointer function: %dn", x);  /* طبع قيمه اكس وهي 20 */

   return (0);
}
#3

المثال السابق هو عباره عن

calling function by reference

#4

اسف اخي

توني استوعب وافهم سؤالك :D

هذا مثال وهو جواب على سؤالك

/* array pointers as a functions */
#include 
void f1() {
     printf("Function 1n");
}

void f2() {
     printf("Function 2n");
}

void f3() {
     printf("Function 3n");
}

void display(void (*call)()) {
     call();
}

int main() {
    void (*fun[3])() = {f1, f2, f3};

    printf("nn");
    printf("First Calln");
    (*fun[0])();
    (*fun[1])();
    (*fun[2])();

    printf("nSecond calln");
    display(fun[0]);
    display(fun[1]);
    display(fun[2]);

    return (0);
}

وهذا مثال اخر

/* Ascening Desending as a pointer functions */

#include <stdio.h>



void Sort(int *, int, int ( * )(int *, int *));

int Ascending(int *, int *);

int Descending(int *, int *);

void Display(int *, int);

void Swap(int *, int*);

void Copy(int [][2], int []);



int main() {

	int A[3][2] = {{5,3},{1,6},{4,2}};

	int B[6];



	Copy(A,B);



	printf("Datan");

	Display(B,6);



	Sort(B,6, Ascending);

	printf("nData After Ascening Sortn");

	Display(B,6);



	Sort(B,6, Descending);

	printf("nData After Descening Sortn");

	Display(B,6);



	printf("n");



	return (0);

}



void Display(int *B, int size) {

	int i;



	for (i=0; i<size; i++)

 	 printf("%d ", *(B+i));

}



void Swap(int *x, int *y) {

	int temp = *x;

	*x = *y;

	*y = temp;

}



void Sort(int *B, int size, int (*A_D_Sort)(int *, int*)) {

	int i, j;



	for (i=size-1; i>0; i--)

  for (j=0; j<i; j++)

 	 if (A_D_Sort((B+j),(B+j+1)))

    Swap((B+j),(B+j+1));

}



int Ascending(int *a, int *b) {

	return (*a > *b);

}



int Descending(int *a, int *b) {

	return (*a < *b);

}



void Copy(int A[][2], int B[]) {

	int i,j,k=0;



	for (i=0; i<3; i++)

  for (j=0; j<2; j++)

 	 B[k++] = A[j];

}
#5

سؤال مستعجل : اريد الحل

عمل برنامج يقرأ قيم موجبه يعني أكبر من الصفر اذاكان هذا الرقم له نفس القراءه من اليمين واليسار نطبع رساله true ماعدا ذالك false مثال:

1221 نجد انه يقراء من اليمين واليسار معطينا نفس القيمه

3245 بينما هذا الرقم لايمكن قرائته من اليسار واليمين بنفس القيمه

#6

هناك موضوع كتبته في المنتدى تحت عنوان :"تمرين وحل, للتدريب على سي أو سي++" تجده في الصفحة الثالثة من المنتدى... إقرأه... ففيه الحل.

#7

اسمحلي السؤال جدا سهل المفروض تكون عارف الحل

هذا الموضوع مغلق.

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