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

(( الكود كاملا + مع بعض الأسئلة ))

مغلق
بدأه n3rd في 23 فبراير 2007 · 2 رد · 716 مشاهدة · في لغة C و ++C
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

السلام عليكم ورحمة الله وبركاته

سأطرح عليكم الكود كاملا لكي نناقشه وذلك تحت عنوان(تقوية أساسيات اللغة) :D

الكود:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
void *myThread(void *arg)
{
	printf("%s\n",arg);
	pthread_exit(NULL);
}
int main(int ac,char *av[])
{
	pthread_attr_t * thAttr=NULL;
	pthread_t tid;
	int i;
	int ret;
	for(i=0;i<ac;i++)
		pthread_create(&tid,thAttr,myThread,(void*)av);
}

نبدأ الأسئلة وهي:

س الأول:

void *myThread(void *arg)
{
	printf("%s\n",arg);
	pthread_exit(NULL);
}

في السطر الأول هل يمكن للدالة أن تكون مؤشر؟ :D وكيف يمكن تفسير ذلك منطقيا؟

وفي نفس السطر أعتقد إنه الدالة لاتعود بأي قيمة << صحيح. :)

ولكن هل المعامل لها (لاشئ)؟كيف يكون void و void معناها لاشئ؟ولماذا النجمة اللي ماقبل arg?

ملاحظة:أتمنى إنه يكون هناك كتاب خاص بالنجوم * في السي لإني أراها في كل مكان وحتى في منامي :D ولا أستطيع تفسير ماهيتها :D

وعندي سؤال آخر خارج الكود وهو:

س الثاني:

int sockid=(int)arg;

لماذا وضعنا الـint بين قوسين وماذا لو أخرجناها مابين القوسين وكانت هكذا int arg هل لهما نفس المعنى؟

وسؤال آخر وهو:

س الثالث:

char *buffer=malloc(128);

هنا أنا أرى المؤشر buffer من نوع char .

والآن لو كتبنا واستعلمنا هذا المؤشر في أماكن عدة من البرنامج وكتبنا هذا:

&buffer << أعتقد إنه بيجلب عنوان واللي هو عادة زي كذا 0x00000؟

ولو كتبت كذا

*buffer << أعتقد إنه بيجلب القيمة المخزنة في عنوان ما؟

ولكن ماذا لو كتبت:

buffer << ماذا سيظهر؟ :)

هذه كانت أسألتي لهذا اليوم راجيا من الله العلي العظيم أن يحفظكم ويوفقكم ويجعل أجوبتكم في موازين أعمالكم يوم الدين :)

#2

السلام عليكم أخ Sniper

أخي العزيز

بالنسبة للسؤال الاول نعم يمكن أن يكون هناك مؤشر لدالة و هذا من المواضيع المتقدمة قليلاً , و السبب لأنها عبارة عن سلسلة من البيانات في الذاكرة التي ينفذها المعالج و بالتالي سيكون لها عنوان أول بايت هو المؤشر لهذه الدالة..

نصيحتي لك أخي العزيز قبل أن تخوض في هذه الأمور ( المؤشرات خصيصاً ) يجب عليك فهم منطق المؤشرات قبل تطبيقها و يوجد العديد من الدروس المثبتة حول هذا الأمر و أعتقد أن الأخ HGB لديه موضوع يتكلم عن المؤشر *void و مؤشرات الدوال.

بالنسبة للسؤال الثاني :

int هنا ليست لتعريف متغير بل هي ما يسمى بالـ type casting أي تحويل القيم لحظة التشغيل ..

طبعاً وضعها بين قوسين يعني أن ما بعدها سيتم حساب قيمته و يتم ارجاع القيمة إلى المتغير على شكل int

السؤال الثالث :

buffer& تعطيك عنوان المؤشر نفسه في الذاكرة ( عنوان المؤشر و ليس عنوان ما يشير إليه )

buffer* تعطيك محتوى مايؤشر عليه المؤشر

buffer تعطيك عنوان ما يؤشر عليه المؤشر في الذاكرة ( عنوان المحتوى الذي يؤشر عليه )

تحياتي

#3

كفيت و وفيت والله

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

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