Code:void nhap(int *a.....bạn thấy 2 code chém nhau chưa ? :-"Code:void main() { int a[2][4]; nhap(a,2,4);
mình mới học con trỏ và mảng 2 chiều..dùng TC++ để biên dịch
code này là code nhập xuất đơn giản .. nhưng nó bị sao ồi...giúp mình sửa với nha
Code:#include<stdio.h> #include<conio.h> #include<math.h> void nhap(int *a,int m,int n) { int i,j,t; for(i=0;i<m;i++) for(j=0;j<n;j++) { t=i*n+j; printf("nhap a[%d,%d]=",i,j); scanf("%d",a+t); } } void xuat(int *p,int m,int n) { int i,j,t; for(i=0;i<m;i++) { for(j=0;j<n;j++) { t=i*n+j; printf("%d",*(p+t)); } printf("\n"); } } void main() { int a[2][4]; nhap(a,2,4); xuat(a,2,4); getch(); }
Code:void nhap(int *a.....bạn thấy 2 code chém nhau chưa ? :-"Code:void main() { int a[2][4]; nhap(a,2,4);
code ra gió bão
code này là code nhập xuất đơn giản .. nhưng nó bị sao ồi...giúp mình sửa với nhaC Code:
#include<stdio.h> #include<conio.h> #include<math.h> void nhap(int *a,int m,int n) { int i,j,t; for(i=0;i<m;i++) for(j=0;j<n;j++) { t=i*n+j; } } void xuat(int *p,int m,int n) { int i,j,t; for(i=0;i<m;i++) { for(j=0;j<n;j++) { t=i*n+j; } } } int main() { int a[2][4]; nhap((int*)a,2,4); xuat((int*)a,2,4); getch(); }
Sửa vậy là được, nhưng không nên nhập xuất kiểu này chút nào.
Have fun!
mình mới học con trỏ..nên thực hành ấy mà...đọc sách C thấy nó khác..biên dich bằng C++ thì phải lên đây hỏi thui ^^..có nhiều cái trong C nó không chấp nhận..Dù sao cũng thanks all nha
Nếu để thực hành tốt thì bạn sử dụng hẳn với con trỏ luôn đừng nhập nhằng vừa mảng vừa con trỏ, sau này thạo rồi hãy dùng linh hoạt, tuy nhiên nếu chỉ dùng con trỏ thì bạn học qua phần cấp phát động đi thì chương trình mới chạy ổn.mình mới học con trỏ..nên thực hành ấy mà...đọc sách C thấy nó khác..biên dich bằng C++ thì phải lên đây hỏi thui ^^..có nhiều cái trong C nó không chấp nhận..Dù sao cũng thanks all nha
Sửa/Xóa bài viết
ừ cám ơn lời khuyên...mình có 1 thắc mắc này...nếu như
ở thân chương trình
ở lời gọi hàmCode:nhap(a,3)
thì kết quả khi printf mảng a[] ra vẫn đúng..vì khi khai báo mảng a là như con trỏ rùi a[i]=*(a+i)Code:void nhap(int a[3],int m) { for(i=0;i<m;i++) scanf("%d",&a[i]); }
còn bên mảng 2 chiều thì sao??..code sau đây là không đúng..muốn đúng phải dùng đến con trỏ như bài trên
câu hỏi đặt ra là " làm sao để tạo 1 hàm nhập mảng 2 chiều" và lưu lại đc giá trị của mảng đó để sử dụng trong thân chương trình chính,mà không phải dùng đến con trỏ và mảng 2 chiều như bài tập trên cùng?"Code:#include<stdio.h> #include<conio.h> void nhap(int a[3][4],int n,int m) { int x,i,j; for(i=0;i<n;i++) for(j=0;j<m;j++) { printf("nhap a[%d][%d]=",i,j); scanf("%d",&x); a[i][j]=x; } } void main() { int a[3][4],i,j; clrscr(); nhap(a,3,4); for(i=0;i<3;i++) { for(j=0;j<4;j++) printf("%d",a[i]); printf("\n"); } getch(); }
Chỉ sai lỗi đó thôi.Code:for(i=0;i<3;i++) { for(j=0;j<4;j++) printf(" %d",a[i]);//a[i][j]; printf("\n"); }
Khi nhập mảng 2 chiều mình thường khai báo như này:
vd:
Nhưng phải cấp phát mới chạy được.Code:int **a;
Code Demo:
Code:#include <stdio.h> #include <stdlib.h> void nhap(int **a,int n,int m) { int i,j; for(i=0;i<n;i++) for(j=0;j<m;j++) { printf("nhap a[%d][%d]=",i,j); scanf("%d",&a[i][j]); } } int main() { int **a; a=(int**) malloc (3*sizeof(int*)); for (int i=0;i<3;i++) a[i]=(int*) malloc (4*sizeof(int)); nhap(a,3,4); for (int i=0;i<3;i++) free (a[i]); free (a); }
ừh cám ơn héy..mà bạn nè mình học con trỏ thì nên học và tương tác các giá trị theo kiểu như bạn nhỉ....chứ nếu như thế tiện hơn trong cấp phát vùng nhớ và khi cần có thể free thì đỡ tốn bộ nhớ hơn phải không...hỏi 1 câu ngoài nha...khi bạn viết soft bạn có hay dùng con trỏ không?.....mà trong cái sách C của mình..nó không dạy cái kiểu int **a đó nơi..hic..cái này là thuộc C++ hay C vậy bạn...nhiều khi học mờ thấy bối rối quá....
C mà bạn, đọc sách thầy Ất hình như cũng có, ứng dụng của con trỏ trong C là rất phổ biến, gần như tất cả các chương trình to to đều động đến nó ít nhiều.ừh cám ơn héy..mà bạn nè mình học con trỏ thì nên học và tương tác các giá trị theo kiểu như bạn nhỉ....chứ nếu như thế tiện hơn trong cấp phát vùng nhớ và khi cần có thể free thì đỡ tốn bộ nhớ hơn phải không...hỏi 1 câu ngoài nha...khi bạn viết soft bạn có hay dùng con trỏ không?.....mà trong cái sách C của mình..nó không dạy cái kiểu int **a đó nơi..hic..cái này là thuộc C++ hay C vậy bạn...nhiều khi học mờ thấy bối rối quá....
Nên dùng con trỏ để cấp phát bộ nhớ và xóa khi cần, như vậy sẽ tránh được lãng phí bộ nhớ.
Còn một điều có thể bạn chưa biết, mảng là con trỏ hằng.
Have fun!
Hình như thầy Phạm Văn ất chỉ có sách C++ thui mờ...mình thì đọc 2 loại 1 loại của "Nguyễn đình tê,Hoàng đức hải" và 1 cuốn của "Quách Tuấn Ngọc"
có mua thêm quyển BT C A--Z...để mai đi lục xem có sách thầy Ất ko