انتقل إلى المحتوى

البرمجة بلغة C/ف6:المؤشرات

من ويكي الجامعة, مركز التعليم الحر

المفهوم

[عدل]
  • مُتغير يخزن عنوان متغير آخر
  • نوع مشتق من نوع آخر رئيس:
int > int* - char > char* ...
  • البنية
type* name= &variable (same type);
  • & يتوافق مع العنوان
int main () {

int x = 5;

int* p = &x;

return 0;
                   }

مؤشر إلى مؤشر

[عدل]
  • يمكن أن تشير المؤشرات إلى المؤشرات
  • توجد مؤشرات من الدرجة الثانية والثالثة
int main () {

char x = 'c';

char* p1 = &x;

char** p2 = &p1;

return 0;
                   }

المؤشرات والجداول

[عدل]
  • اسم الجدول هو مؤشر للعنصر الأول في الجدول.
  • يمكن استخدام هذه الأداة لإدارة الجدول مع الدوال.
  • تمرير المؤشر في الدالة!
  • ميزة: تبقى القيم في الدالة الرئيسة main()!
  • آلية العمل:
  1. تعريف دالة تقبل مؤشراً وسيطاً.
  2. تُستدعى في الدالة الرئيسة main ويمرر الاسم في الجدول!
  • لا يوجد إعادة تشغيل: تتغير القيمة مباشرة من الدالة الرئيسة main ()
  • نوع المؤشر = نوع الجدول
  • Pointer type = Table type
طباعة جدول بدءاً من دالة
#include<stdio.h>

void fon1 (int* a){
    for (int i =0; i<size; i++){
        printf ("%d ",a[i]);
                           }
                   }
int main (){
    const int size = 10;
    int a [size] = {0,1,2,3,4,5,6,7,8,9};
    fon1 (a);
    return 0;
           }

المؤشرات والدوال

[عدل]
  • تجعل المؤشرات من الممكن للخرج أن يعود بأكثر من قيمة واحدة في الدالة.
  • "الإرجاع" في هذا السياق يعني أنَّ الدالَّة يمكن أن تغير عدة متغيرات في الدالة الرئيسة main ().
  • آلية العمل
  1. تعريف الدالة التي تقبل مؤشرات وسطاء.
  2. الاستدعاء في الدالة الرئيسة main () وتمرير عنوان المتغيرات!
  • لا يوجد إعادة تشغيل: تتغير القيمة مباشرة في الدالة الرئيسة main ().
  • نوع المؤشر = نوع المتغير
  • Pointer type = variable type
  • c* يشير إلى القيمة التي تشير لها c
طباعة جدول بدءاً من دالة
#include<stdio.h>

void fon1 (int a, int b, int* c, int* d){
    *c = (a+b)*2;
    *d = a* b;
                                                          }
int main (){
    int lon =5, lar =10;
    int per, area;
    fon1(lon, lar, &per, &area);
    printf ("Parameter= %d\n area=%d",per,area);
    return 0;
              }