بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته
سأطرح عليكم الكود كاملا لكي نناقشه وذلك تحت عنوان(تقوية أساسيات اللغة) :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 << ماذا سيظهر؟ :)
هذه كانت أسألتي لهذا اليوم راجيا من الله العلي العظيم أن يحفظكم ويوفقكم ويجعل أجوبتكم في موازين أعمالكم يوم الدين :)

