PDA

View Full Version : تحلیل کد



cyber_17
چهارشنبه 26 آذر 1393, 14:48 عصر
سلام
این کد مربوط به linked list هاست..مشه برام تحلیل کنید بگید دقیقا هر خط چی کار می کنه؟ بیشتر مشکلم تو خط ۱ و ۲ و پنجمه. ممنون

126665

zero_ox
چهارشنبه 26 آذر 1393, 19:04 عصر
سلام ,
عملگر typedef برای ایجاد نام دوم برای یک نوع به کار می ره مثل نوع حالا این نوع یک داده کتابخانه ای باشه مثل int ,double یا یک ساختار توجه داشته باشید که یک نوع جدید ایجاد نمی کنه به انواع موجود یک نام دوم می ده مثلا به typedeft int INTEGER
بقیه هم که یک ساختار هست و چون گفتی لیست پیوندی هست داده سوم link یک اشاره گر به شی ازنوع ساختار هست کد زیر رو ببین متوجه می شی

typedef int INTEGER;typedef struct node NODE;


typedef struct {
INTEGER a;// typedef int INTEGER
double b;
NODE *link ;//typedef struct node NODE;
}node ;

cyber_17
پنج شنبه 27 آذر 1393, 15:02 عصر
سلام ,
عملگر typedef برای ایجاد نام دوم برای یک نوع به کار می ره مثل نوع حالا این نوع یک داده کتابخانه ای باشه مثل int ,double یا یک ساختار توجه داشته باشید که یک نوع جدید ایجاد نمی کنه به انواع موجود یک نام دوم می ده مثلا به typedeft int INTEGER
بقیه هم که یک ساختار هست و چون گفتی لیست پیوندی هست داده سوم link یک اشاره گر به شی ازنوع ساختار هست کد زیر رو ببین متوجه می شی

typedef int INTEGER;typedef struct node NODE;


typedef struct {
INTEGER a;// typedef int INTEGER
double b;
NODE *link ;//typedef struct node NODE;
}node ;



من توضیحات و کد شما رو متوجه شدم،ممنون،اما سوالم اینه که با توجه به این که عملگر typedef برای ایجاد نام دوم برای یک نوع است، پس یعنی اینکه مثلا در typedef int INTEGER، عبارت INTEGER یک نامه. پس زیاد فرقی نمیکنه که چه کاراکترهایی داشته باشه، مثلا میتونست INTEG باشه یا TEGER باشه یا هر چیز دیگه درسته؟ چون بلاخره مفهومش یعنی مجموعه اعداد صحیح. اما تو سوالی که من گذاشتم، P_NODE* گذاشته. یعنی منظورش اشاره گره.خب مگه اینجا نمیگیم P_NODE* یه اسم دومه؟ چون طبق الگوی typedef int INTEGER ، عبارت struct NODE معادل int است و عبارت P_NODE* معادل INTEGER که به عنوان نام دوم در نظر گرفته میشه. اگه اشتباه می کنم بگید. پس چرا P_NODE* روبه عنوان یه نوع جدید تعریف کرده؟ یعنی اینجا اینکه * وجود داشته یا نداشته باشه مهمه.پس یعنی نام نیست؟ اما شما تو مثال خودتون تو قسمت تعریفش (خطاول) ستاره قرار ندادید و داخل typedef struct گذاشتید. چرا؟

zero_ox
پنج شنبه 27 آذر 1393, 19:19 عصر
قسمت اول سوالتون درسته
قسمت دوم سوال کد زیرببینید نوع اشاره گر هست

#include <stdio.h>
#include <stdlib.h>
typedef int* int_ptr;//int pointer


typedef struct node* node_ptr;//node pointer
struct node_ptr{
node_ptr index ;//tyep --struct node pointer--
};
int main()
{
int x=100;
int_ptr a=&x;//int *a=&x;


return 0;
}

cyber_17
پنج شنبه 27 آذر 1393, 23:21 عصر
ببخشید متوجه نشدم الان این پاسخ قسمت اول سوالم بود یا دوم؟ میشه بیشتر توضیح بدید؟

zero_ox
جمعه 28 آذر 1393, 00:45 صبح
من توضیحات و کد شما رو متوجه شدم،ممنون،اما سوالم اینه که با توجه به این که عملگر typedef برای ایجاد نام دوم برای یک نوع است، پس یعنی اینکه مثلا در typedef int INTEGER، عبارت INTEGER یک نامه. پس زیاد فرقی نمیکنه که چه کاراکترهایی داشته باشه، مثلا میتونست INTEG باشه یا TEGER باشه یا هر چیز دیگه درسته؟این قسمت درسته چون بلاخره مفهومش یعنی مجموعه اعداد صحیح. اما تو سوالی که من گذاشتم، P_NODE* گذاشته. یعنی منظورش اشاره گره.خب مگه اینجا نمیگیم P_NODE* یه اسم دومه؟ چون طبق الگوی typedef int INTEGER ، عبارت struct NODE معادل int است و عبارت P_NODE* معادل INTEGER که به عنوان نام دوم در نظر گرفته میشه. اگه اشتباه می کنم بگید. پس چرا P_NODE* روبه عنوان یه نوع جدید تعریف کرده؟ یعنی اینجا اینکه * وجود داشته یا نداشته باشه مهمه.پس یعنی نام نیست؟ اما شما تو مثال خودتون تو قسمت تعریفش (خطاول) ستاره قرار ندادید و داخل typedef struct گذاشتید. چرا؟قسمت دوم سوالتون جلو کامنت ها توضیح دادم int a;// tarif motaghyer aint *p= &a;//tarif eshargar p az noe int typedef int * int_ptr ;// tarif noe eshargar ba typedef int_ptr p=&a;typedef struct NODE* Node_ptr // tarif noe eshargar be sturctNode_ptr link ;

cyber_17
جمعه 28 آذر 1393, 18:04 عصر
بله ممنون
قسمت اول سوالم رو هم میشه پاسخ بدید؟ که با توجه به این که نام هست چرا اشاره گر تعریف کرده و از حالت نام خارج شده؟

ببینید من گیرم اینجاست: وقتی میگیم typedef int INTEGER ، یعنی INTEGER یک نام دوم برای int و میتونیم بنویسیم INTEGER a=2; (مثلا)
حالا در typedef struct NODE *P_NODE، خب struct NODE معادل همون int (نوع داده ای) است در مثال قبلی و P_NODE* هم میشه معادل INTEGER در مثال قبل. یعنی P_NODE* یک نامه، پس اگه نامه، میتونیم به هر شکلی بنویسیم دیگه. میتونیم به شکل P_NODE بنویسیم و ستاره نذاریم. چون اسمه دیگه مهم نیست. اما نمیتونیم این کار رو بکنیم چون این جا منظور تعریف یک اشاره گره. در واقع این جا متغیری به نام P_NODE* تعریف شده نه اسم. من مشکلم فهم این موضوعه ممنون میشم توضیح بدید.

zero_ox
جمعه 28 آذر 1393, 19:26 عصر
چطور می گید یه اشاره گر ازنوع int یا double ...اینجا هم یک اشاره گرازنوع struct : نوع یک اشاره گر ساختار هست که با دستور typedef به P_NODE تغییرکرده ..--int * --struct name *