-
05-09-2014, 04:01 PM #1
Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Cần giúp đỡ truyền dữ liệu mảng vào trong hàm không dùng thêm tham số phụ.
Trong mảng khi nhập vào hàm thì khai báo hàm có tham số phụ bên trong ví dụ: int input(a[10][10])
bây giờ em muốn nhập mảng mà không cần dùng các chỉ số 10,10 mà cũng không dùng con trỏ thì có thể được không vậy?
Em biết được cách lấy độ dài mảng sizeof(a)/sizeof(int) áp dụng cho cái này thì có thể là int input(a[sizeof(a)/sizeof(int),sizeof(a[10])/sizeof(int))
Vì không khai báo cứng nên cũng không được, em thử định nghia #define size sizeof(a)/sizeof(int) cũng không được?
Vậy có cách nào giải quyết được vấn đề này không, có thể viết header file được không? Mong các bác chỉ giáo thêm. [IMG]images/smilies/smile.png[/IMG]View more random threads:
- viết chương trình in lá cờ nước Mỹ
- Lại 1 bài tam giác pascal khó
- Cho em hỏi cách đọc cột của file
- [ Solved ]Hỏi 1 tí về copy constructor
- cho xâu chạy trên màn hình
- Help! Lỗi bài danh sách liên kết đơn.
- Tìm hình chữ nhật trong mảng 2 chiều
- lỗi sai khi sắp xếp chèn????
- Tại sao nó cho kết quả sai.
- [C++]Hỏi về dấu -> và delete
-
05-09-2014, 04:45 PM #2
Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
C thì viết 1 cái struct bao lấy int[][] là xong. Nếu số dòng và số cột cố định thì khai báo hằng số:
Mã:#define N_ROWS 10#define N_COLS 10typedef struct _Table_ { int data[N_ROWS][N_COLS];} Table; void input(Table* pTable) //phải truyền bằng con trỏ{ int i, j; for (i = 0; i < N_ROWS; ++i) for (j = 0; j < N_COLS; ++j) scanf("%d", &pTable->data[i][j]);}
Mã:#include <stdio.h>#include <stdlib.h> typedef struct _Table_ { int** data; int nRows, nCols;} Table; Table constructTable(int rows, int cols){ Table table; table.nRows = rows; table.nCols = cols; table.data = (int**)malloc(table.nRows*sizeof(int*)); int i; for (i = 0; i < table.nRows; ++i) table.data[i] = (int*)malloc(table.nCols*sizeof(int)); return table;} void freeTable(Table table) //ko nhất thiết phải truyền bằng con trỏ{ int i; for (i = 0; i < table.nRows; ++i) free(table.data[i]); free(table.data);} void input(Table table) //ko nhất thiết phải truyền bằng con trỏ{ int i, j; for (i = 0; i < table.nRows; ++i) for (j = 0; j < table.nCols; ++j) scanf("%d", &table.data[i][j]);} int main(){ Table table = constructTable(3, 4); input(table); int i, j; for (i = 0; i < table.nRows; ++i) { for (j = 0; j < table.nCols; ++j) printf("%d ", table.data[i][j]); printf(" "); } freeTable(table); return 0;}
C++ thì có std::vector.
Mã:#include <vector> typedef std::vector<std::vector<int> > Table; void input(Table& table){ for (size_t i = 0; i < table.size(); ++i) for (size_t j = 0; j < table[i].size(); ++j) std::cin >> table[i][j];}
-
06-09-2014, 03:31 PM #3
Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Mã:Table constructTable(int rows, int cols) { Table table; table.nRows = rows; table.nCols = cols; table.data = (int**)malloc(table.nRows*sizeof(int*)); int i; for (i = 0; i < table.nRows; ++i) table.data[i] = (int*)malloc(table.nCols*sizeof(int)); return table; }
- - - Nội dung đã được cập nhật ngày 06-09-2014 lúc 08:31 AM - - -
Mã:#include <stdio.h> #include <stdlib.h> int a[10][10]; typedef struct _Table_ { int** data; int nRows, nCols; } Table; Table constructTable() { Table table; table.nRows = sizeof(a)/sizeof(int); table.nCols = sizeof(a[10])/sizeof(int); table.data = (int**)malloc(table.nRows*sizeof(int*)); int i; for (i = 0; i < table.nRows; ++i) table.data[i] = (int*)malloc(table.nCols*sizeof(int)); return table; } void inPut(Table table){ for(int i=0;i<table.nRows;i++) scanf("%d",&table.data[i]); } void outPut(Table table){ for(int i=0;i<table.nRows;i++) printf("%d\t",table.data[i]); } void freeTable(Table table) { int i; for (i = 0; i < table.nRows; ++i) free(table.data[i]); free(table.data); } void input(Table table) { int i, j; for (i = 0; i < table.nRows; ++i) for (j = 0; j < table.nCols; ++j) scanf("%d", &table.data[i][j]); } int main() { int rows,cols; Table table = constructTable(); input(table); int i, j; for (i = 0; i < table.nRows; ++i) { for (j = 0; j < table.nCols; ++j) printf("%d ", table.data[i][j]); printf(" "); } inPut(table); outPut(table); freeTable(table); return 0; }
-
06-09-2014, 03:52 PM #4
Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
khi cấp phát table thì vẫn cần cho biết là table có bao nhiêu dòng bao nhiêu cột chứ. Nếu là 10x10 thì constructTable(10, 10) là được.
hoặc viết thêm hàm
Mã:Table construct10x10Table() { return constructTable(10, 10); }
NGUỒN SỈ ÁO KHOÁC DENIM NỮ TPHCM CHẤT LƯỢNG CAO Bạn muốn nhập sỉ áo khoác denim nữ để bắt đầu việc buôn bán Online phong cách nhưng lại chưa có kinh nghiệm, muốn sắm xưởng sỉ xống áo vừa có thể giải...
Xưởng sỉ áo khoác jeans denim giá...