با سلام به تمامی دوستان
من یه سوالی داشتم در مورد ارایه ها سوالم این بود که ما زمانی که
توی ویبی یه آرایه تعریف می کردیم بعد میشد تو برنامه اون رو redim کرد
می خواستم بدونم توی زبان C به چه صورت انجام میشه؟
ممنون
با سلام به تمامی دوستان
من یه سوالی داشتم در مورد ارایه ها سوالم این بود که ما زمانی که
توی ویبی یه آرایه تعریف می کردیم بعد میشد تو برنامه اون رو redim کرد
می خواستم بدونم توی زبان C به چه صورت انجام میشه؟
ممنون
سلام من vb بلد نیست باتوجه به این
redim= کلمه کليدي براي تعريف آرايه هاي ديناميکي
int* r=new int[4];
شاید منظور شما این باشه
Kernel Mode Developer
RootKitSMM@Yahoo.com
فکر کنم منظورتون تغییر سایز آرایه باشه ، که تو ++C آرایه ها معمولا به دو نوع تعریف میشوند :توی ویبی یه آرایه تعریف می کردیم بعد میشد تو برنامه اون رو redim کرد
- Fixed Static
- Dynamic
حالت اول به این معنا نیست که سایز آرایه محدود است ، شما در این حالت میتوانید هر سایزی مجاز برای
آرایه انتخاب کنید 10 ، 700 ، 1000 و ... ولی دیگر وقتی آرایه سایزش مشخص شد ، قابل تغییر نخواهد بود .
حالت دوم ، جهت ایجاد آرایه های پویاست ، آرایه هایی که طول آنها در حین اجرای برنامه یا در زمان
Runtime معلوم میشود ، در این حالت باز هم وقتی آرایه سایزش مشخص شد ،
دیگر قابل تغییر نخواهد بود .
ولی این قابلیت برای Vector ها وجود دارد که شما میتوانید سایزی برای آن در نظر گرفته و بعد آنرا تغییر
دهید که اینکار با متود resize انجام میشود ./
موفق باشید ./
نمی دونم redim کارش چیه چون این دو با هم فرق دارن
growable array, resizable array=Dynamic array
dynamically-allocated array
Kernel Mode Developer
RootKitSMM@Yahoo.com
ما هم نگفتیم یکی هستن ، تک تک بررسی کردیم !نمی دونم redim کارش چیه چون این دو با هم فرق دارن
ببینید دوست عزیز ، اگه از لحاظ تئوری وار بریم جلو ، میشه آرایه ها رو به 4 الی 5 بخش تقسیم کرد ،
از جمله : Dynamic,Fixed Stack Dynamic,Fixed Heap Dynamic,Fixed Stack Static, ...
ولی همه اینها که در همه زبانها پیاده سازی نشده اند و در زبان ++C,C دو نوع معمول وجود دارد که در بالا
ذکر کردم !
در ضمن در همین لینک ویکی شما گفته بنده دیده میشه :
C++'s std::vector is an implementation of dynamic arrays
دوست عزیز ، من در بالا ذکر کردم ، اینکار بطور پیش فرض برای آرایه ها در ++C,C ممکن نیست ، ولی اگهبرای تغییر اندازه آرایه
با STL یا (Standard Template Library) آشنایی داشته باشید ، گفتم میتونید از Vector ها استفاده کنید ./
یه مثال :
http://www.cplusplus.com/reference/stl/vector/resize/
--------------------
بارها من این نکته رو گفتم ، اینطور فکر نکنید که ++C یه زبان و یه دنیاست و C یه دنیای دیگر !البته من C کار می کنم ++C کار نکردم
این دو مکمل یکدیگرند ! جدای اینکه ++C تکمیل یافته C میباشد ./
آخرین ویرایش به وسیله Salar Ashgi : شنبه 20 شهریور 1389 در 22:03 عصر
Kernel Mode Developer
RootKitSMM@Yahoo.com
در C یا سی++ آرایههای خام (raw arrays) (یا ایجاد شده بر روی stack یا ایجاد شده بر روی free store)، تغییر اندازه نمیدهند. شما اگر آرایهای را با اندازهٔ x ایجاد کنید، هیچگاه نمیتوانید اندازهٔ آن را تغییر دهید. بنابراین، به عنوان راه حل، یک آرایهٔ جدید با طول جدید ایجاد میکنند و سپس اعضای موجود را از آرایهٔ قبلی در آرایهٔ جدید کپی کرده و آرایهٔ قبلی را نابود میکنند. در VB نیز اینکار صورت میگیرد اما بطور غیر مستقیم و دور از چشم برنامهنویس.می خواستم بدونم توی زبان C به چه صورت انجام میشه؟
بنابراین، برای تغییر طول آرایه، باید یک آرایهٔ جدید را با طول جدید ایجاد کرده و اعضای آرایهٔ قبلی را در آرایهٔ جدید به ترتیب کپی کنید، سپس آرایهٔ قبلی را نابود کنید. در سی++ کلاس vector این کار را توسط تابع resize برای شما انجام میدهد، در زبان C نیز اینکار توسط تابع realloc صورت میگیرد، یا بدون استفاده از این تابع:
int* x = (int*)calloc(sizeof(int), 5);
x[0]=1;
x[1]=2;
x[2]=3;
x[3]=4;
x[4]=5;
int* y = (int*)calloc(sizeof(int), 10);
memcpy(y, x, sizeof(int) * 5);
free(x);
x = y;
y = NULL;
x[5]=6;
x[6]=7;
x[7]=8;
x[8]=9;
x[9]=10;
ممنون PC2st
من از این کد استفاده میکنم
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
int main() {
int* array;
int n, i;
printf("Enter the number of elements: ");
scanf("%d", &n);
array = (int*) malloc(n*sizeof(int));
for (i=0; i<n; i++) {
printf("Enter number %d: ", i);
scanf("%d", &array[i]);
}
حالا اگه بخوام همین رو به صورت دو بعدی در بیارم چه جوریه ؟
ممنون
برای اینکار باید برعکس همین کار را انجام دهید!! یعنی آرایهٔ دوبعدی را بصورت آرایهٔ یکبعدی (معمولی) مورد استفاده قرار دهید، باتوجه به اینکه آرایههای دوبعدی در حقیقت (نحوهٔ چینش اعضای آنها در حافظه) همان آرایههای تکبعدی هستند، پس برای ایجاد یک آرایهٔ دو بعدی به اندازهٔ m در n خواهیم داشت:حالا اگه بخوام همین رو به صورت دو بعدی در بیارم چه جوریه ؟
array = (int*) malloc(m*n*sizeof(int));برای دسترسی به تمام اعضای این آرایه بر اساس اعضای موجود در سطر i ام و سطر j ام:
array[i*(m+1)+j]i از صفر تا m-1 و j از صفر تا n-1 (حداکثر طول آرایهٔ array برابر با m*n است)
بطور مثال برای دسترسی به عضو موجود در سطر اول (0) و ستون سوم (2) مینویسیم:
array[0*(m+1)+2] //array[0][2]
ممنون
میشه شکل کلی کد رو بذارید من مبتدیم
ممنون
#include <stdlib.h>
#include <stdio.h>
int main() {
int* array;
int m, n, i, j, x;
printf("Enter the number of elements: ");
scanf("%d", &m);
scanf("%d", &n);
array = (int*) malloc(m*n*sizeof(int));
for (i=0; i<m; i++) {
for (j=0; j<n; j++) {
printf("Enter number %d, %d: ", i, j);
scanf("%d", &array[i*(m + 1)+j]);
}}
for (x=0; x<m*n; ++x) {
printf("%d: %d\n",x, array[x]);
}
}