Nhập xuất mảng con trỏ

Cho em hỏi nhập xuất có vấn đề gì vậy ạ?

void nhap(int *a, int &n)
{
     cout<<"nhap so phan tu mang"<<endl;
     cin>>n;
     a=(int*)calloc(n,sizeof(int));
     for(int i=0;i<n;i++)
     {
             cout<<"a["<<i<<"]=";
             cin>>*(a+i);
             }
 }
 void hienmang(int *a, int n)
 {
      for(int i=0;i<n;i++)
         cout<<*(a+i);
      cout<<endl;   
 }
1 Like

Lỗi xảy ra khi em chưa khai báo biến đã sử dụng. Rõ ràng e đã sử dụng 2 biến n, a trước khi em khởi tạo giá trị cho 2 biến đó. (Em khởi tạo trong hàm nhưng trước đó e đã sử dụng nó là tham số đầu vào của hàm. Vậy là sử dụng trước khi khởi tạo). Đây là hàm a đã sửa lại.

    #include "stdafx.h"
    #include "iostream"
    using namespace std;
    
    void nhap(int *a, int &n)
    {
    	
    	
    	for (int i = 0; i<n; i++)
    	{
    		cout << "a[" << i << "]=";
    		cin >> *(a + i);
    	}
    }
    
    void hienmang(int *a, int n)
    {
    	for (int i = 0; i<n; i++)
    		cout << *(a + i);
    	cout << endl;
    }
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	int * a, n;
    	cout << "nhap so phan tu mang" << endl;
    	cin >> n;
    	a = (int*)calloc(n, sizeof(int));
    	nhap(a,n);
    	hienmang(a, n);
    	system("pause");
    	return 0;
    }
2 Likes

a có thể nói rõ hơn được không ạ.gì mà chưa khởi tạo hả a

@thanhnam em cho anh xem hàm gọi hàm nhập xuất thử, lỗi ở hàm nào. Lỗi ra sao?

à nó không đưa ra được giá trị anh ạ.ví dụ: nhập 1 2 3 4 5 thì nó đưa ra 1222 33445566…

@tuancoi2506 trả lời cho em rồi đó (đúng 1/2, mà cũng coi như là đúng hết). Đó là ở chỗ em chưa gán giá trị nào cho mảng a cả.

Ở đây em khai báo int * a để chứa mảng đúng không.

Cái dòng a=(int*)calloc(n,sizeof(int)); phải để bên ngoài hàm nhập. Vì nó ở ngoài, nên em buộc phải nhập vào n ở bên ngoài luôn. (Thế nên Tuấn trả lời đúng 100%)

Tại sao phải để a=(int*)calloc(n,sizeof(int)); ở ngoài. Vì bản chất nếu em cấp vùng nhớ cho a ở trong hàm nhap, giá trị được cấp cho a sẽ bị hủy ngay sau khi kết thúc hàm nhap.

C pass by value == C truyền tham trị == C truyền giá trị của biến, không phải là cái biến

Em xem thêm bài này, ở đây anh chỉ giới thiệu biến kiểu cơ bản, chưa giới thiệu con trỏ

1 Like

dạ.em hiểu rồi.em cám ơn các anh nhé

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?