פורסם 2012 בדצמבר 1312 שנים void quickSort(void *arr, int lo, int hi ,int(*comperison)( void *, void *) ){ // lo is the lower index, hi is the upper index // of the region of array a that is to be sorted int i=lo, j=hi; void* x=arr[(lo+hi)/2]; זה עושה לי שגיאה כאן..משהו בשימוש לא נכון ב void // partition do { while ((*comperison)( x, arr[i])==1) i++; ובשתי ה while while ((*comperison)( arr[j], x)==1) j--; if (i<=j) { h=a[i]; a[i]=a[j]; a[j]=h; i++; j--;
פורסם 2012 בדצמבר 1312 שנים אם p הוא מצביע (נגיד מטיפוס *int) אז הפעולה [p[j שקולה לפעולה (p+j)*, והטיפוס של הדבר הזה הוא int, ולא *int.אם p הוא *void אז הטיפוס הוא "כאילו" void, אבל כיוון שאין טיפוס כזה באמת והקומפיילר לא יודע מה לעשות עם זה, קוד כזה לא יתקמפל. אם אתה רוצה לגשת לאיבר ה-i במערך כזה, אז אתה חייב לשמור עליו כמצביע, ולכן אסור לך להשתמש ב-[] ובמקום זה אתה צריך להשתמש באריתמטיקה של מצביעים. חוץ מזה, אתה צריך לדעת מה גודל הטיפוס ש-arr מצביע עליו - על מנת לדעת כמה צריך להוסיף לו (לדוגמה, אם p הוא *int אז הקומפיילר יודע שכשעושים p+1 אז צריך בעצם להוסיף ל-p הוא הגודל של int, שהוא בד"כ 4 או 8. לעומת זאת אם p הוא *short אז הקומפיילר יודע כשעושים p+1 אז צריך להוסיף ל-p את הגודל של short, שהוא רק 2 בד"כ. אבל אם p הוא *void אז הקומפיילר לא יודע כמה להוסיף, משום שאין לו טיפוס שהוא יכול להשתמש בגודל שלו).
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.