اريد توضيح بلغة السي عن
pointer to funtion
وهي ان يكون البراميتر funtion
وشكراااااااااا.
اريد توضيح بلغة السي عن
pointer to funtion
وهي ان يكون البراميتر funtion
وشكراااااااااا.
مثلا بال 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);
}المثال السابق هو عباره عن
calling function by reference
اسف اخي
توني استوعب وافهم سؤالك :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];
}سؤال مستعجل : اريد الحل
عمل برنامج يقرأ قيم موجبه يعني أكبر من الصفر اذاكان هذا الرقم له نفس القراءه من اليمين واليسار نطبع رساله true ماعدا ذالك false مثال:
1221 نجد انه يقراء من اليمين واليسار معطينا نفس القيمه
3245 بينما هذا الرقم لايمكن قرائته من اليسار واليمين بنفس القيمه
هناك موضوع كتبته في المنتدى تحت عنوان :"تمرين وحل, للتدريب على سي أو سي++" تجده في الصفحة الثالثة من المنتدى... إقرأه... ففيه الحل.
اسمحلي السؤال جدا سهل المفروض تكون عارف الحل
هذا الموضوع مغلق.