انجمن‌های فارسی اوبونتو

کمک و پشتیبانی => برنامه‌سازی => نویسنده: learner:~$ در 01 فروردین 1403، 10:44 ب‌ظ

عنوان: اشاره گر ها و انواع آن
ارسال شده توسط: learner:~$ در 01 فروردین 1403، 10:44 ب‌ظ
درود

یکی از مشکلاتی که من در زبان سی دارم ( و شاید هم همه ) اشاره گر ها هستند. اشاره گر ها در ابتدا خیلی معقول به نظر میرسند. اما وقتی وارد توابع پیشرفت میشید یا با مفاهیم پیشرفته آشنا میشید؛دیگه به معقول نیستند.

من چند تا ایراد اساسی دارم و امیدارم که منو راهنمایی کنید که در مورد اشاره گر ها هستند ( نه اشاره گر از نوع ساختمان یا یونیون )‌و عبارت از :
۱- اشاره گر به اشاره گر مثلا:
int **ptr
که به دابل پوینتر هم معروفه ولی ما اشاره گر به اشاره گر اشاره گر هم داریم ( میگید نه؟؟! )‌:

https://www.geeksforgeeks.org/c-pointer-to-pointer-double-pointer/
 (https://www.geeksforgeeks.org/c-pointer-to-pointer-double-pointer/)

https://www.geeksforgeeks.org/chain-of-pointers-in-c-with-examples/
 (https://www.geeksforgeeks.org/chain-of-pointers-in-c-with-examples/)
البته تابع اشاره گر هم هست ولی اون تا حدی برطرف شد ( خیلی خوشم اومد از تابع اشاره گر )
۲-اشاره گر از نوع ثابت:
این یکی واقعا وحشتناکه چون خیلی شبیه به همه مثلا :
const char *ptr_name
cahr *const ptr_name
const char * const var_name
البته مثل همیشه جستجو کردم ( تو یوتیوب ویدیو های خیلی خوبی بود ولی بازم نفهیمدم:(  )

https://www.youtube.com/watch?v=dh5r3wSkOCg
 (https://www.youtube.com/watch?v=dh5r3wSkOCg)

https://www.youtube.com/watch?v=egvGq3WSF9Y
 (https://www.youtube.com/watch?v=egvGq3WSF9Y)

https://www.youtube.com/watch?v=m2tUIfiUqGs
 (https://www.youtube.com/watch?v=m2tUIfiUqGs)
البته باز هم ایراد دارم ولی نمیخوام همش رو باهم بفهمم.میخوام آروم آروم بفهمم ولی عمیق یاد بگیرم.

عنوان: پاسخ : اشاره گر ها و انواع آن
ارسال شده توسط: 🇬🇧بریتانیای کبیر🇬🇧 در 01 فروردین 1403، 11:21 ب‌ظ
برای اینکه اشاره گر هارو بفهمی باید با اونا خیلی کار کنی و بفهمی که ptr میشه آدرس اون چیزی که بهش اشاره میشه و ptr* میشه مقداری که بهش اشاره میشه.
باید بفهمی که یک رشته و آرایه ها همشون درحقیقت  اشاره گر ثابتن.
مثلا برای تمرین میتونی از شکل اشاره گری آرایه ها در برنامه هات استفاده کنی.
مثلا char **argv میشه یک آرایه دوبعدی کاراکتری یا یک آرایه یک بعدی اشاره گری که به متغیر های از نوع کاراکتری اشاره میکنه.

اینجور چیزا در کاتابا خوب توضیح داده شده.

نقل‌قول
خیلی خوشم اومد از تابع اشاره گر
کل قدرت توابع string.h از همینه.

درستش
fun(&ch);

char *fun( const char *ptr)
یا، (کسی از زیری استفاده نمیکنه.)
const char * ptr

تا از اینا زیاد استفاده نکنی متوجهشون نمیشی.
عنوان: پاسخ : اشاره گر ها و انواع آن
ارسال شده توسط: sd70 در 02 فروردین 1403، 12:09 ق‌ظ
مورد اول رو بذارید با یک مثال توضیح بدم. فرض کنید یک تابع دارید که قراره حافظه تخصیص‌داده‌شده به اشاره‌گر int شما رو آزاد (free) کنه و مقدارش رو برابر با NULL قرار بده. این تابع به چنین شکلی نوشته میشه:
void free_and_null(int **ptr) {
    free(*ptr);
    *ptr = NULL;
}

مثال:
int *p = (int *)malloc(5 * sizeof(int));
free_and_null(&p);

در حالت کلی وقتی میخوایم داخل یک تابع، یک پوینتر رو به یک آدرس دیگه اشاره بدیم از این روش استفاده می‌کنیم. کلا مقدار هر چیزی رو بخوایم داخل یه تابع تغییر بدیم از آدرسش (پوینتر)‌ استفاده می‌کنیم. وقتی مقدار یه int رو بخوایم داخل یک تابع تغییر بدیم از آدرس اون int (پوینتر به اون int) استفاده می‌کنیم. به طور مشابه وقتی مقدار یک پوینتر رو بخوایم داخل یک تابع تغییر بدیم از آدرس اون پوینتر (پوینتری به اون پوینتر) استفاده می‌کنیم. به همین سادگی.

مورد ۲:
در C یک رشته (string) مجموعه‌ای ار کارکترهاست که به یک 0 ختم میشه. بعنوان مثال دو تا آرایه زیر دقیقا مقدار و ساختارشون یکیه:
char s1[] = { 'H', 'e', 'l', 'l', 'o', 0 };
char s2[] = "Hello";
printf("s1 = %s, s2 = %s\n", s1, s2);

s1 و s2 هر دو آرایه‌اند و مقدارشون رو میشه تغییر داد. مثال:
s1[0] = 'G';
s2[0] = 'M';
printf("s1 = %s, s2 = %s\n", s1, s2);

دو اشاره‌گر زیر رو در نظر بگیرید:
char *p1 = s1;
const char *p2 = s1;

p1 و p2 هر دو اشاره‌گرهایی به s1 هستند اما فرق شون اینه که p2 نمیتونه مقدار s1 رو تغییر بده. کد زیر کاملا درست عمل میکنه:
p1[0] = 'P';
اما این کد موقع کامپایل ارور میده چرا که اشاره‌گر p2 نوعش const تعریف شده و اجازه تغییر مقداری که بهش اشاره داره رو نداره:
p2[0] = 'Q';
حالا این دو مورد رو در نظر بگیرید:
char * const p3 = s1;
const char * const p4 = s1;

p3 و p4 مثل حالت قبل هر دو اشاره‌گرهایی به s1 هستند. دقیقا مثال حالت قبل p3 میتونه محتوای s1 رو تغییر بده اما p4 نمیتونه. حالا تفاوتی که این دو مورد با حالت قبل دارند اینه که این اشاره‌گر ها نمی‌تونن به متغیر دیگه‌ای اشاره داشته باشن.

در کد زیر ما میایم میگیم p1 و p2 از این به بعد به یک متغیر جدید اشاره داشته باشن و خب این کار انجام میشه:
p1 = s2;
p2 = s2;

اما کد زیر compile error میده چرا که اشاره‌گرهای p3 و p4 از نوع ثابتن و اجازه ندارن به متغیر دیگه‌ای اشاره داشته باشن:
p3 = s2;
p4 = s2;

جمع‌بندی:
این موارد رو اگه خوب درک کردین در رابطه با string constant ها و این که چرا رشته‌ها در C به چنین شکلی نوشته میشن مطالعه کنید:
const char *str = "Hello";
پیشنهاد می‌کنم کتاب K&R رو هم بخونید.
عنوان: پاسخ : اشاره گر ها و انواع آن
ارسال شده توسط: learner:~$ در 02 فروردین 1403، 11:12 ق‌ظ
خب من این چیزی که در مورد اشاره گر به اشاره گر فکر میکنم اینه:
دابل پوینتر اشاره گری که به حافظه یک اشاره گر؛ که داره آدرس حافظه و محتویات یک متغیر دسترسی داره.
فکر نمیکنم اینقدر ساده باشه ???
و سوالی که پیش میاد اینه که :‌
int number
int* ptr_number
int ** d_ ptr_number
number  = 10
ptr_number = &number
d_ptr_number = &ptr_number

در خط پنجم ما اشاره گر نوع اول رو (نوع ساده) برابر با آدرس number قرار دادیم ( تا اینجاش که خیلی راحته) و به محتویات اون دسترسی داریم.
در خط آخر ما یک دابل پوینتر داریم که که به اشاره گر نوع اولمون اشاره میکنه؛ که هم به آدرس اون دسترسی داره هم به محتویاتش درست؟؟
خب یعنی ما اگر مقدار دابل پوینتر رو عوض کنیم هم مقدار number  عوض میشه هم مقدار اشاره گر نوع اول؟؟/:
من مطمعنم در این حد ساده نیست!
 و اینکه دابل پوینتر ها در توابع به چه درد در توابع و پاس دادن آرگومان ها دارن؟؟‌ چرا مستقیم خود اشاره گر رو به عنوان آرگومان پاش نمیدیم؟؟‌
some_func(&variable)

و اینکه آیا میشه یک تابع  دابل پوینتر درست کرد؟؛چیزی شبیه به این رو ما داریم :
int (*pointer_func) (const char*, const char*) = strcmp
ولی آیا این هم درسته؟؟
int (**d_pointer) (const char& , const char& ) = strcmp
strcmp یک از توابع string.h  که دو رشته رو مقایسه میکنه( همین داستان اشاره گر از نوع ثابت رو از اینجا فهمیدم و کنجکاو شدم )
میخوام اول این دابل پوینتر رو بفهمم بعد به سراغ اشاره گر نوع ثابت برم.
عنوان: پاسخ : اشاره گر ها و انواع آن
ارسال شده توسط: 🇬🇧بریتانیای کبیر🇬🇧 در 02 فروردین 1403، 11:50 ق‌ظ
شما اول باید اشاره گر ثابت و اینکه رشته و آرایه ها هم در حقیقت اشاره گرنو بفهمی.
عنوان: پاسخ : اشاره گر ها و انواع آن
ارسال شده توسط: sd70 در 02 فروردین 1403، 12:19 ب‌ظ
دابل پوینتر اشاره گری که به حافظه یک اشاره گر؛ که داره آدرس حافظه و محتویات یک متغیر دسترسی داره.
فکر نمیکنم اینقدر ساده باشه
به همین سادگیه. اشاره‌گر به یک متغیر، یعنی آدرس اون متغیر در حافظه. حالا میخواد متغیر نوعش int باشه double باشه خودش یک پوینتر باشه یا پوینتری به یک پوینتر باشه یا هر چی.
در خط آخر ما یک دابل پوینتر داریم که که به اشاره گر نوع اولمون اشاره میکنه؛ که هم به آدرس اون دسترسی داره هم به محتویاتش درست؟؟
خب یعنی ما اگر مقدار دابل پوینتر رو عوض کنیم هم مقدار number  عوض میشه هم مقدار اشاره گر نوع اول؟؟/:
چرا مستقیم خود اشاره گر رو به عنوان آرگومان پاش نمیدیم؟؟‌
مطلبی که دیشب (https://forum.ubuntu-ir.org/index.php?topic=157725.msg1245172#msg1245172) ارسال کردم پاسخ این دو تا پرسش رو داشت.

پیشنهاد می‌کنم در خصوص Higher-order function مطالعه بکنید.
عنوان: پاسخ : اشاره گر ها و انواع آن
ارسال شده توسط: learner:~$ در 02 فروردین 1403، 01:08 ب‌ظ
بله مطلب رو خوندم ولی منظورم اینه که در کجا ها کاربرد چطور باید از اون ها استفاده کرد؟
هرچند که منظورم یک چیز دیگه بود منظورم ساهت یک تابع دابل پوینتر بود که در پیام قبل اشاره کرده بودم.
نقل‌قول
پیشنهاد می‌کنم در خصوص Higher-order function مطالعه بکنید.
تا حالا اسمش رو هم نشنیدم منظورتون توابع vardiac نیست ( اگر درست گفته باشم)؟ الان میرم سرچه میکنم.
*رفتم مطالعه کردم.ولی من نمیخوام چیزی رو به عنواه تابع برگردونم فقط منظورم اینه که مثلا یک دابل پوینتر به یک تابع داشته باشیم.:
int (**d_ptr) (arg1, arg2) = some_func
و سوالی که پیش میاد اینه که آیا در پرانتز دوم میتونیم یک اشاره گر داشته باشیم؟ مثلا:
(*arg1, arg2*)
یه چیزی شبیه به این؛یا باید آدرس حافظه اون رو قرار بدیم؟؟ :
(arg1&, &arg2)
عنوان: پاسخ : اشاره گر ها و انواع آن
ارسال شده توسط: sd70 در 02 فروردین 1403، 01:30 ب‌ظ
رفتم مطالعه کردم.ولی من نمیخوام چیزی رو به عنواه تابع برگردونم فقط منظورم اینه که مثلا یک دابل پوینتر به یک تابع داشته باشیم
پوینتر به تابع هم در همین دسته قرار می‌گیره.
منظورم اینه که مثلا یک دابل پوینتر به یک تابع داشته باشیم
جدای از این که چنین کاری امکان‌پذیر نیست، دقیقا قصد انجام چه کاری رو دارید و دنبال چه کاربردی هستید که باید آدرس آدرس تابع رو داشته باشید!!؟ کاربرد اشاره‌گر به تابع (function pointer) برای وقتیه که تابع callback داریم:
https://www.tutorialspoint.com/callback-function-in-c
عنوان: پاسخ : اشاره گر ها و انواع آن
ارسال شده توسط: learner:~$ در 02 فروردین 1403، 02:28 ب‌ظ
من میخوام خیلی عمیق بشم تو سیستم عامل خیلی خیلی عمیق.میخوام سوکت نویسی هم شروع بکنم.
call-back  رو خیلی شنیدم ولی اطلاعاتی در موردش ندارم باید برم یم جستجو بکنم.میخوام زبان سی رو خیلی خیلی عمیق و دقیق یاد بگیرم.اگر کتابی هم سراغ داربد معرفی کنید.هرچند که منبع کل کتاب های برنامه نویسی رو یکجا دارم. اما وافعا خوندن پی دی اف خیلی خیلی سخته.
عنوان: پاسخ : اشاره گر ها و انواع آن
ارسال شده توسط: sd70 در 02 فروردین 1403، 02:54 ب‌ظ
اول مفاهیم پایه رو خوب یاد بگیرید بعد سراغ موارد پیچیده‌تری مثل پوینتر به فانکشن و این موارد برید. این که دنبال بدست آوردن آدرس آدرس یک تابع بودید (یک کار غیرممکن و نادرست) معنیش اینه که هنوز با این مفاهیم به خوبی آشنایی ندارید.

برای یادگیری زبان C کتاب K&R و برای یادگیری عمیق سوکت‌نویسی کتاب Hands-On Network Programming with C رو پیشنهاد میکنم
عنوان: پاسخ : اشاره گر ها و انواع آن
ارسال شده توسط: learner:~$ در 02 فروردین 1403، 03:29 ب‌ظ
اول مفاهیم پایه رو خوب یاد بگیرید بعد سراغ موارد پیچیده‌تری مثل پوینتر به فانکشن و این موارد برید. این که دنبال بدست آوردن آدرس آدرس یک تابع بودید (یک کار غیرممکن و نادرست) معنیش اینه که هنوز با این مفاهیم به خوبی آشنایی ندارید.

برای یادگیری زبان C کتاب K&R و برای یادگیری عمیق سوکت‌نویسی کتاب Hands-On Network Programming with C رو پیشنهاد میکنم
جفتش رو داردم!!
k&r منسوخ شده و زیاد کاربردی نیست هرچند که خیلی از مفاهیم رو توضیح داده. از جمله توابع و کتابخانه های یونیکسی. و اینکه این کتاب به درد من مبتدی نمیخوره  چون خیلی پیچیده توضیح میده/ انگار باید یه بار به صورت حرفه ای سی رو بلد باشی.
والا من یه کتاب سفارش دادم قرار بود قبل عید بیارن که نحوه سوکت نویسی در TCP/IP  رو توضیح میداد ( اثر غلامرضا تبریزی بود ).
من با این ها کار کردم و برنامه های زیادی رو با مفاهیم ابتدایی نوشتم.ولی الان حس میکنم تو بخش پیشرفته هستم( پوینتر ها و توابع و ساختار ها و یونیون ها و صف و لیست و هیپ و استک و..).
عنوان: پاسخ : اشاره گر ها و انواع آن
ارسال شده توسط: nixoeen در 02 فروردین 1403، 03:58 ب‌ظ
k&r منسوخ شده و زیاد کاربردی نیست
فکر نمی‌کنید هنوز زوده در مورد کاربردی بودن یا منسوخ بودن یک کتاب نظر بدید؟ :)
عنوان: پاسخ : اشاره گر ها و انواع آن
ارسال شده توسط: learner:~$ در 02 فروردین 1403، 04:38 ب‌ظ
k&r منسوخ شده و زیاد کاربردی نیست
فکر نمی‌کنید هنوز زوده در مورد کاربردی بودن یا منسوخ بودن یک کتاب نظر بدید؟ :)
من ۲۴ ساعته در سایت ها و فروم های مختلف برنامه نویسی میگردم یا حتی یوتیوب. که اکثرشون ۲ چیز رو گفتن:

۱- برنامه نویسی به سبک k&r منسوخ شده.
۲- سینتکس k&r منسوخ شده.
درضمن من خودم این کتاب رو به صورت چاپی دارم و گاهی مطالعه میکنم.این کتاب فقط برای مرجع خوبه نه یادگیری!.( فکر کنم این مورد رو همه میدونیم)کتاب های زیادی رو زبان سی مطالعه کردم ( نه کامل فقط جزئی ) مثل:
head first c
c for absoluteBEginer
modern aproach c
practical c
deep c secrets(expert c )
c primer plus
extreme C
 و امروز دو کتاب دیگه رو دارم بررسی میکنم :
pointers in c
pointers on c 
این دو کتاب باهم فرق دارند ولی تا حد زیادی با هم اشتراک دارند.
پس فکر کنم بتونم خوب یا بد بودن یک کتاب رو متوجه بشم ???
هرچند که ka&r داستانش فرق داره و یک کتاب مقدسه ولی خب برای من مبتدی جالب نیست مگر برای کار با چند تابع مختلف.
به شخصه کتابی رو دوست دارم که از صفر صفر تا صد صد رو پوشش بده به همراه مثال ها و نکات فراوان. و کاربرد هر تابع یا کتابخانه و نحوه استفاده شون و کار با اون زبان در حوزه های مختلف.
من با کتاب خوندن به جایی نمیرسم. میخوام تمرین کنم و از پروژه های ساده به سمت سخت پیش برم. میخوام خیلی خیلی یاد بگیرم.

عنوان: پاسخ : اشاره گر ها و انواع آن
ارسال شده توسط: nixoeen در 02 فروردین 1403، 05:50 ب‌ظ
من ۲۴ ساعته در سایت ها و فروم های مختلف برنامه نویسی میگردم یا حتی یوتیوب.
پیشنهاد می‌کنم این زمان رو بذارید و شروع به خوندن یک کتاب، هر کتابی، در مورد سی بکنید. در حال حاضر به نظر میاد در مفاهیم پایه‌ای زبان سی مشکل دارید و به نظر نمیاد که حتا یک کتاب رو به صورت کامل خونده باشید.
عنوان: پاسخ : اشاره گر ها و انواع آن
ارسال شده توسط: learner:~$ در 02 فروردین 1403، 06:06 ب‌ظ
من ۲۴ ساعته در سایت ها و فروم های مختلف برنامه نویسی میگردم یا حتی یوتیوب.
پیشنهاد می‌کنم این زمان رو بذارید و شروع به خوندن یک کتاب، هر کتابی، در مورد سی بکنید. در حال حاضر به نظر میاد در مفاهیم پایه‌ای زبان سی مشکل دارید و به نظر نمیاد که حتا یک کتاب رو به صورت کامل خونده باشید.
متاسفانه نمیتونم حرف شما رو انکار کنم   :) و قبول هم دارم اما وسواس خیلی زیادی رو کتاب دارم با اون مشخصاتی که گفتم.
در حال حاضر دوتا کتاب دارم ولی میترسم باز هم کتاب بگیرم ؛ این دو کتاب عبارته از:
۱-برنامه نویسی به زبان سی اثر قمی نژاد
۲-زبان برنامه نویسی سی از قلزم (‌k&r)
که اولی رو چندین و چند بار خوندم.
اما دیگه نمیدونم چیکار کنم  ](*,) کتابی میخوام که منو راه بندازه و قویم بکنه.
البته کتاب های تخصصی زیادی در حوزه سی خوندم که در رابطه با برنامه نویسی سیستمی در گنو/لینوکس بودند؛ولی تا مفاهیم ابتدایی رو بلد نباشیم اونا بدرد نمیخورن. :'(
عنوان: پاسخ : اشاره گر ها و انواع آن
ارسال شده توسط: دانیال بهزادی در 03 فروردین 1403، 05:14 ب‌ظ
پیشنهاد من:
https://www.gnu.org/software/c-intro-and-ref/manual
عنوان: پاسخ : اشاره گر ها و انواع آن
ارسال شده توسط: learner:~$ در 03 فروردین 1403، 05:39 ب‌ظ
پیشنهاد من:
https://www.gnu.org/software/c-intro-and-ref/manual
مرجع؟ میتونم از هر قسمتی که دوست داشتم شروع بکنم به خوندن؟؟
عنوان: پاسخ : اشاره گر ها و انواع آن
ارسال شده توسط: learner:~$ در 03 فروردین 1403، 10:19 ب‌ظ
درود

یه سایت خیلی خوب برای درک بهتر اشاره گر ها پیدا کردم :

https://pythontutor.com/c.html#mode=edit

 (https://pythontutor.com/c.html#mode=edit)
ای کاش یه دیباگر اینطوری داشتم :'( خیلی خوب تصویر سازی میکنه و خودش گویای همه چیزه.
عنوان: پاسخ : اشاره گر ها و انواع آن
ارسال شده توسط: learner:~$ در 03 فروردین 1403، 11:02 ب‌ظ
دوستان یک سوال ذهن من رو داره میخوره.

یک اشاره گر به تنهایی هیج نوعی نداره درست؟؟ و فقط به یک متغیر از یک نوع خاص اشاره میکنه درسته؟
مثلا :

پس چرا این کد خطا میده؟:
int A= 150, *Pa;
Pa = &A;
double D, *Pd;
char ch, *Pc,
Pd = (int)Pa;

چرا باید حتما اینطوری مشخص بکنیم؟؟:
Pd = (int*)Pa
طرف صحبتم با اون ستاره ای که تویه پرانتزه! چرا باید اصلا جلوی نوع داده باشه؟؟ چرا نباید پشت نوع داده باشه؟ چرا اصلا باید ستاره وجود داشته باشه!
میشه یکی بگه تبدیل نوع در اشاره گر ها به چه صورته؟؟ چیز زیادی رو اینترنت نیاورد فقط یه سایت خوب اورد:

https://www.google.com/url?sa=t&source=web&rct=j&opi=89978449&url=https://ecomputernotes.com/what-is-c/function-a-pointer/type-casting-of-pointers&ved=2ahUKEwjttaTCx4iFAxUE_rsIHRb5C4EQFnoECBMQAQ&usg=AOvVaw2uU99zP48osv9_ax6dct3a
 (https://www.google.com/url?sa=t&source=web&rct=j&opi=89978449&url=https://ecomputernotes.com/what-is-c/function-a-pointer/type-casting-of-pointers&ved=2ahUKEwjttaTCx4iFAxUE_rsIHRb5C4EQFnoECBMQAQ&usg=AOvVaw2uU99zP48osv9_ax6dct3a)
عنوان: پاسخ : اشاره گر ها و انواع آن
ارسال شده توسط: sd70 در 04 فروردین 1403، 12:41 ق‌ظ
هنوز مفاهیم پایه‌ای پوینتر رو شما خوب درک نکردین و به نظرم نباید سراغ type casting تو پوینترها برید. دقیقا به همین دلیله که میگید چند تا کتاب رو خوندین اما هنوز مفاهیم پایه C رو درک نکردید چون هیچ کدومش رو نمی‌خونید.

خب بگذریم. خیلی خلاصه بخوام بگم، تو قطعه کد زیر میایم b که یک double هست رو cast میکنیم به یک int و اونو میذاریم داخل a که یه int ـه:
int a;
double b;

b = 40.75;
a = (int)b; // cast [double] to [int]
دقیقا با همین منطق توی کد زیر، q که نوعش double *‎ (اشاره‌گر double) هست رو cast می‌کنیم به یک int *‎ (اشاره‌گر int) و اونو میذاریم داخل p که یک int *‎ ـه: (مثال زیر صرفا جنبه آموزشی داره)
int *p:
double *q;

q = &b;
p = (int *)q; // cast [double *] to [int *]

این مورد ارتباطی به موضوع نداره اما با توجه به لینکی که قرار دادین توصیه می‌کنم افزونه Don't track me Google (https://addons.mozilla.org/en-US/firefox/addon/dont-track-me-google1/) رو روی مرورگرتون نصب کنید.
عنوان: پاسخ : اشاره گر ها و انواع آن
ارسال شده توسط: learner:~$ در 04 فروردین 1403، 08:15 ق‌ظ
خب یعنی این ستاره در اون پرانتز فقط یک سینتکس به خصوصه درسته؟
عنوان: پاسخ : اشاره گر ها و انواع آن
ارسال شده توسط: sd70 در 04 فروردین 1403، 11:29 ق‌ظ
خیر، اون ستاره که یه موجودیت مستقل نیست. تمام اون چیزی که داخل پرانتز نوشته شده، نوع (type) متغیره. در مثال زیر نوع متغیر a میشه int نوع متغیر p هم میشه int *‎ (اینت پوینتر).
int a;
int *p;
عنوان: پاسخ : اشاره گر ها و انواع آن
ارسال شده توسط: learner:~$ در 04 فروردین 1403، 11:40 ق‌ظ
خیر، اون ستاره که یه موجودیت مستقل نیست. تمام اون چیزی که داخل پرانتز نوشته شده، نوع (type) متغیره. در مثال زیر نوع متغیر a میشه int نوع متغیر p هم میشه int *‎ (اینت پوینتر).
int a;
int *p;
بله متوجه شدم  :) خیلی ممنون کم کم دارم یه چیزایی یاد میگیرم و میفهمم ممنونم.
عنوان: پاسخ : اشاره گر ها و انواع آن
ارسال شده توسط: esmaeelE در 18 فروردین 1403، 11:59 ب‌ظ
مثال:
int *p = (int *)malloc(5 * sizeof(int));
free_and_null(&p);
ممنون از توضیحات گویاتون در مورد اشاره‌گرها در زبان سی.
برای تکمیل مطلب لازمه که اضافه کنم

در سی نیازی به تبدیل نوع صریح نوع اشاره گر برای تابع malloc نیست.
تبدیل از *void به عنوان نوع بازگشتی از malloc به نوع متناسب برحسب عبارت سمت چپ به صورت خودکار انجام می‌شود و در سی برخلاف ++C نیازی به تبدیل صریح نداریم.

به علاوه در صورت عدم موفقیت اجرای malloc در اختصاص حافظه تبدیل نوع اشاره‌گر می‌تواند مقدار عددی در متغیر چپ عبارت قرار دهد. ممکن است که چنین کاری به یک حالت و رفتار پیشبینی نشده Undefined Behavior منجر شود.

https://stackoverflow.com/questions/605845/should-i-cast-the-result-of-malloc-in-c

یک بررسی اجمالی روی کدهای لینوکس نشان می‌دهد تنها در همین چهل و سه مورد روی malloc تبدیل صریح داریم.


https://paste.ubuntu-ir.org/yvxv
 (https://paste.ubuntu-ir.org/yvxv)