سلام
چطوری باید توی C#.net اشاره گر تعریف کرد
مثلا
int * next
ممنون
سلام
چطوری باید توی C#.net اشاره گر تعریف کرد
مثلا
int * next
ممنون
اصولا اینطوری استفاده می کنند البته سی شارپ فقط در بلاکهای کدی اجازه می دهد از اشاره گر استفاده کنید(البته باید بلاکتان را علامت گذاری کنید)
سلام
میشه یکم بیشتر توضیح بدیدن دقیقا یعنی چی؟
من می خوام یک کلاس تعریف کنم برای PUSH و POP کردن(ساختن stack) و می خوام ساختار stack رو با اشاره گر تعریف کنم
میخواستم بدونم میشه از اشاره گر استفاده کرد یا نه؟
چون من خیلی کم .net کار میکنم ، فکر کنم موضوعی به اسم برنامه امن و نا امن مطرح میشه که دقیقا نمی دونم چیه.
ممنون
اصولا برای استفاده از اشاره گرها باید از این کلمه استفاده کنید
unsafe {
int* pInt = stackalloc int[30];
*pInt = 5;
//pInt[0]=5;
*(pInt + 1) = 6;
//pInt[1]=6;
Console.WriteLine("*pInt={0}",*(pInt+1));
}
این دستور یک حافظه ای رو بر روی پشته قرار می ده البته بدون هیچ مقدار دهی اولیه
با این کدها هم می توانید مقدار دهی کنید و یا به عناصر دسترسی داشته باشید
البته این کد یک پشته رو پیاده سازی نمی کنه البته یک ارایه است مبتنی بر پشته
در مورد کد نا امن هم برفرض مثال اگر همین رو در نظر بگیریم به 2 صورت می شود پیاده سازی کرد
که در اولی چون خارج از ارایه است exception ایجاد می شود
int[] myInt = new int[10];
myInt[25] = 1;
ولی در این کد هیچ گونه نظارتی انجام نمی گیرد
int* pInt = stackalloc int[20];
pInt[40]=8
برای کامپایل هم باید از قسمت properties قسمت Build گزینه Allow unsafe code رو انتخاب کرده باشین .
سلام
راهی وجود نداره که بشه از اشاره گر استفاده کرد
اما به کد ، safe اضافه نکرد؟
مثل توابع API که مثلا به جای int * نوع داده ای با نام Pint وجود داره
یا هر راه دیگه ای ، اما کارکرد آشاره گر رو داشته باشه
ممنون
من فکر نکنم این اجازه در سی شارپ داده شده باشه که بدون استفاده Unsafe بتوان از اشاره گر استفاده کرد .
خوب یک وقتی مساله پیاده سازی stack هست یه وقتی استفاده از stack هست.
اگر مساله بخش دوم هست در .نت stack پیاده سازی شده است ، می توانید از آن استفاده کنید
در پیوند زیر یک مثال خوب به همراه توضیح هم هست.
http://www.csharpfriends.com/Article...x?articleID=65
سلام
من کد زیر رو نوشتم
اما بلاک unsafe رو قبول نمیکنه
مشکل کجاست؟
بلاک unsfe رو فقط توی بلاک main قبول می کنه
راهی وجود داره تا بتونم کد بالا رو درست کنم
(باید از اشاره گر استفاده کنم)
Allow unsafe code رو چکشو زدم
ممنون
دوست عزیز شما در مورد CTS مطالعه کن مشکلت حل میشه همونطور که arsp گفتش نیازی به Pointer نیست شما باید یه کلاس خود ارجاع بنویسی با توجه به اینکه class در net. یه نوع داده مرجعی هست(RefrenceType) مشکلی پیش نمیاد بعد برای لیست پیوندی حتما" نباید Struct باشه میتونه کلاس مثلا"
اینیم که unsafe رو قبول نمیکنه بخاطر اینه که باید به compiler بفهمونید که کد شما باید unsafe ه این کار با دستور unsafe/ به کامپایلر فهمونده میشه ولی اگه از vs استفاده میکنید تو Properties پروژتون یه جا هست تیکش رو میزنید درست میشه :D
class Node
{
object Data;
Node refrence;
}
فکر کنم Build باشه
سلام
قبلش ازدوستان که پیگیر هستند ممنون
WinFx Developer عزیز ممنون
من هم میدونم استک رو میشه با غیر از لیست هم پیاده سازی کرد (آرایه)
اما باید با لیست پیدا سازی کنم
توی لینک زیر قسمتی از کد به زبان VC++.net میخواستم بدونم معادل اون به VC#.net چی میشه؟
http://i28.tinypic.com/33acn6d.jpg
قسمتی از کد اینه که تبدیلش به VC#.net برام مشکله
struct mystack
{
int count1,count2;
mystack * next;
};
class stack
{
mystack * Topstack;
public:
stack(){
Topstack=NULL;}
void push(int a,int b){
mystack * p;
p=new mystack;
p->count1=a;
p->count2=b;
p->next=Topstack;
Topstack=p;}
};
همون طور که معلومه من برای عناصر استک یک struct تعریف کردم
و از اون توی کلاس stack استفاده کردم.
مشکل اصلی من همین قسمته(تبدیل قسمتی های که
از اشاره گر استفاده شده)
ممنون
دوستان عزیز ببخشید یک تاپیک قدیمی رو کشیدم بالا.مشکل من دقیقا همین نکته هست اما صریح توضیح داده نشده.گفتم اگه تاپیک مجدد بزنم پاکش می کنن.این کد رو کجا باید بنویسم دقیقا؟ unsafe /رو کجا بنویسم؟هرجا می نویسم پیغام خطا میده...می خوام یک اشاره گر بسازم.(برای ساختن یک صف و استفاده از front و rear.ممنون میشم کامل توضیح بدید.
unsafe {
int* pInt = stackalloc int[30];
*pInt = 5;
//pInt[0]=5;
*(pInt + 1) = 6;
//pInt[1]=6;
Console.WriteLine("*pInt={0}",*(pInt+1));
}
پیغام خطات رو بذار اینجا.
به احتمال خیلی زیاد ، سویچ /unsafe کامپایلر رو on نکردی
Project -> Properties -> Build -> Allow Unsafe Code
We work in the dark, we do what we can, we give what we have.
Our doubt is our passion and our passion is our task.
The rest is the madness of art