30/09/2018, 16:00

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;   
 }
Phạm Hoàng Tuấn viết 18:06 ngày 30/09/2018

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;
    }
tieulong viết 18:07 ngày 30/09/2018

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

Nguyễn Minh Dũng viết 18:15 ngày 30/09/2018

@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?

tieulong viết 18:04 ngày 30/09/2018

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

Nguyễn Minh Dũng viết 18:05 ngày 30/09/2018

@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ỏ

Đăng ký khóa học C++ cơ bản 2016 ( NEW ) tại đây : Thông tin về khóa học xem tại đây : -Sự khác biệt giữa 2 khóa học cũ và mới : +Khóa học C++ cơ bản 2016 là khóa học mới, được đầu tư nhiều hơn từ nội dung, phương pháp học, cách học hiệu quả. +Trong khóa học còn có nhiều kiến thức mới như thực hành trên HackerRank, thực hành trên Codefights và Đạt nghĩ mọi người nên học khóa học mới, bởi vì đây là kiến thức mới, phù hợp với hiện tại..... Mặt khác âm thanh cũng tốt hơn nhiều so với khóa học …
tieulong viết 18:12 ngày 30/09/2018

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

Bài liên quan
0