Chưa hiểu con trỏ

Em chào mn ạ,em có 2 vấn đề xin phép được vào luôn ạ.
Em đang học C tới phần con trỏ-mảng động,em đang thực hiện lai phần thuật toán thêm phần tử mảng động(link code ở dưới ạ) thì gặp vấn đề là kể cả khi em không dùng hàm malloc để thêm thì e vẫn ra kết quả bth.Điều tương tự cũng xảy ra với thuật toán xoá,mn có thể cho e biết e đã sai ở đâu được không ạ.
Vấn đề thứ 2 là trong quá trình code,em có code y chang lại theo như một người dạy trên youtube thì người đó chạy code hoàn toàn bth nhưng khi em chạy thì nó lại ra dòng lỗi như ảnh.Chuyện này cũng xảy ra với mọi code của web khác,tất cả đều có chung dòng code nên em ko nghĩ rằng code lỗi nhưng em vẫn không thể chạy được
Mn ai biết có thể giải đáp giúp em với ạ,em đang dùng dev-C++ ạ


http://codepad.org/FKqfOHgR

C và C++ là 2 ngôn ngữ khác nhau. Bạn nên xem kỹ video hướng dẫn bạn là C hay C++
Trong C không có khai báo & ở phần tham số hàm.

Mảng của bạn code là mảng tĩnh chứ không phải mảng động. Mảng của bạn được cấp phát ở Stack (khi khai báo int arr[MAX], mảng động được cấp phát ở Heap (dùng malloc).

Đa số các hướng dẫn Tiếng Việt trên mạng đều dạy lẫn lộn C và C++, người ta hay để C/C++. Thực chất là dạy C++ theo phong cách C. Hi vọng bạn tìm được nguồn phù hợp vì mình không biết nguồn Tiếng Việt nào phù hợp cả.

8 Likes

Em vừa coi lại,đúng là họ có dạy lẫn C/C++ ạ,cảm ơn anh.
Em nghĩ anh hơi lộn tí anh ạ,ảnh em chụp là mảng tĩnh thật,mảng động của e nằm trong codepad ạ,mong anh có thể coi lại và giải đáp giúp e câu 1 với ạ

Với C hay C++ thì kiểm tra cái này là việc của người lập trình :smiley: (trừ std::vector::at thì có check).Truy cập ngoài rìa vùng cấp phát không đảm bảo đâu.
Tính vùng cấp phát + 1 vẫn được chấp nhận nhưng truy cập thì không được.

2 Likes

Bạn bị lỗi này?

Line 5: error: ‘for’ loop initial declaration used outside C99 mode

Đây là lỗi dùng C compile version cũ C89 khi khai báo biến ngay tại thời điểm sử dụng. Cụ thể hơn thì C89 yêu cầu người dùng phải khai báo biến ở đầu của hàm.
Ví dụ:

void Nhap_Mang(int arr[],int n) {
    int i = 0;  // phải khai báo biến ngay đầu hàm C99
	for(i = 0; i < n; i++) {
		printf("\nHay nhap gia tri cho arr[%d]: ",i);
		scanf("%d",&arr[i]);
	}
}

Giải pháp:

  • Hoặc là bạn tìm một IDE mới để sử dụng.
  • Hoặc là tìm kiếm chỗ config cho tool để dùng version C cao hơn như C99 (1999) hay C11 (2011) -> cái này cần bạn học khả năng dùng google nhé.
2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?