PDA

View Full Version : [Q] Cấp phát động????



CAPSTAN
10-10-2002, 16:40
:( Xin chào và xin hỏi:
có khai báo sau:

float (*pa)[10] //hai hai chiều có số cột cố định là 10;

Vậy làm sao dùng new để cấp phát động (số hàng) cho mảng này???

bpmtri
11-10-2002, 16:34
Nếu bạn muốn khai báo một mảng hai chiều có số cột là 10, số hàng là x thì khai báo như thế này: (VD x= 20)

float (*pa)[10];
int x = 20;

cấp phát cho nó:

pa = new float[x*10];

CAPSTAN
12-10-2002, 13:24
Ý tôi là một mảng hai chiều thực sự chứ không phải mảng một chiều giả làm hai chiều.

madcat
12-10-2002, 14:21
mảng 2 chiều thực sự là mảng một chiểu mà thôi, chẳng qua lả cách tổ chức dữ liệu

danceswithwolves
12-10-2002, 17:27
và, biến mảng cũng chỉ là biến con trỏ thôi.

float* pF = new float[N]; // pF : pointer to float
float pF[] = new float[N]; // pF : const pointer to float

còn, như lời capstan@ nói, cần mảng 2 chiều cố định 10x10 thì cấp phát động làm gì cho mệt ? dùng mảng trên stack cũng được mà :

float aF[10][10]; // 2-dimension float array on stack

chuotluoi
13-10-2002, 01:30
tui nghĩ là tui hiểu ý capstan rồi
u có thể khai báo như sau:

double **matrix;
matrix = new *float [sohang];
for(int i=0;i<sohang;i++) matrix[i] = new float [socot];

khi đó thì matrix là biến pointer cấp 2 (dòng 1)được cấp phát động (dòng thứ 2) với số lượng là sohang trong đó mỗi biến lại chứa một pointer khác chỉ đến vùng nhớ vừa cấp phát (dòng thứ 3)
Như vậy ta đã có vùng nhớ được cấp phát là socot*sohang
Khi truy xuất dùng

matrix[vitrihang][vitricot]

giống như truy xuất đến mảng 2 chiều bình thường vậy!!!

Is it right???Có đúng ý u không????

nmd
13-10-2002, 20:50
Xin các bạn giúp dùm mình sửa đoạn code nay:
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>


void main()
{
char**string;
char*str;
str=(char*)malloc(10);
strcpy(str,"dsf");
int i=0;
string=(char**)malloc(240);
while(i<3)
{
string[i]=(char*)malloc(80);
string[i]="";
strcat(string[i],str);
i++;
}
free(str);
i=0;
while(i<3)
{
free(string[i]);
i++;
}
free(string);
}

Xin cam on.

CAPSTAN
15-10-2002, 11:38
Chuot luoi đúng đó. Đây chỉ là vấn đề kĩ thuật vui vui thối. Không biết có cú pháp kì quái nào để cấp phát động cho một mảng cố định số cột như trong C không. Ví dụ:
float (*pa)[10];
pa=(float(*)[10])malloc(sốhàng*sizeof(float*));
Không hiều trong C++ có cách nào tương tự không.
Vui vui.

chuotluoi
16-10-2002, 06:38
hi nmd,
tui thấy hình như trong đoạn code đó bạn bị sai vì chưa hiểu rõ lắm về cú pháp sử dụng cấp phát động!!!
dối với 1 khai báo:

str=(char*)malloc(10);

thì biến str phải là kiểu pointer lớn hơn 1 cấp so với loại vùng nhớ được cấp phát(ơ đây là char*). Do vậy mà bạn phải khai báo str kiểu char** thì mới được!!!!:-/ str là pointer chứa pointer kiểu pointer của chuỗi...:-/

to capstan,
tui chưa thấy cú pháp trên bao giờ?!?! Làm sao có thể dò ra cách đặt cú pháp như vậy???
hì C tui chỉ biết sơ sơ thui!!!:-)

nmd
16-10-2002, 19:21
Cám ơn Chuotluoi! Nhưng mình cũng đã giải quyết xong rồi.

CAPSTAN
17-10-2002, 15:35
Gửi chuot luoi ,chẳng qua là tôi cũng đọc sách mà biết thôi chứ cũng không biết cách nào dò ra được cả. Tên sách, ví dụ: C faq