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