Ôn tập: duyệt mảng bằng con trỏ
Thuộc phần Logic và luồng điều khiển trong hành trình C của Coddy. Bài học 11 trên 63.
Thử thách
DễViết một chương trình C có hàm tính tổng tất cả phần tử trong một mảng số nguyên bằng phép toán con trỏ và tính tương đương giữa mảng với con trỏ. Chương trình cần:
- Tạo hàm tên là
calculateSumnhận hai tham số:- Một con trỏ đến số nguyên (
int *arr) đại diện cho mảng - Một số nguyên (
size) đại diện cho số phần tử trong mảng
- Một con trỏ đến số nguyên (
- Bên trong hàm
calculateSum:- Khởi tạo biến
sumbằng 0 - Tạo biến con trỏ
ptrvà đặt nó trỏ đến đầu mảng - Dùng vòng lặp để duyệt mảng bằng phép toán con trỏ
- Ở mỗi lần lặp, cộng giá trị mà
ptrtrỏ đến vàosum - Tăng con trỏ để chuyển đến phần tử tiếp theo
- Trả về tổng đã tính
- Khởi tạo biến
- Trong hàm
main:- Đọc một số nguyên
nđại diện cho kích thước của mảng - Khai báo một mảng số nguyên có kích thước
n - Đọc
nsố nguyên từ đầu vào để điền vào mảng - Gọi hàm
calculateSumvới mảng và kích thước của mảng - In kết quả theo định dạng: "Sum: [value]"
- Đọc một số nguyên
Hàm phải dùng phép toán con trỏ để duyệt mảng, không dùng cú pháp chỉ số mảng như arr[i]. Thay vào đó, hãy dùng phép giải tham chiếu con trỏ và các thao tác tăng con trỏ để truy cập phần tử mảng.
Ví dụ, nếu đầu vào là:
5
10 20 30 40 50Đầu ra của bạn sẽ là:
Sum: 150Thử thách này kiểm tra mức độ hiểu của bạn về cách hàm nhận mảng làm tham số con trỏ, cách dùng phép toán con trỏ để duyệt mảng hiệu quả và cách tên mảng tự động chuyển thành con trỏ khi được truyền vào hàm.
Tự làm thử
#include <stdio.h>
// TODO: Viết hàm (function) calculateSum tại đây
int main() {
int n;
scanf("%d", &n);
int arr[n];
// Đọc các phần tử của mảng (array)
for(int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
// TODO: Gọi hàm calculateSum và lưu kết quả
// TODO: In kết quả theo định dạng "Sum: [value]"
return 0;
}Tất cả bài học trong Logic và luồng điều khiển
1Nền tảng về con trỏ
Con trỏ là gì?Khai báo con trỏToán tử lấy địa chỉ (&)Toán tử giải tham chiếu (*)Con trỏ NULLÔn tập: kiến thức cơ bản về con trỏ4Dự án: Công cụ xử lý văn bản đơn giản
Tổng quan dự ánĐếm ký tự2Con trỏ và mảng
Tên mảng dưới dạng con trỏPhần tử mảng và con trỏPhép toán con trỏSo sánh con trỏÔn tập: duyệt mảng bằng con trỏ5Con trỏ và hàm
Truyền theo giá trịTruyền con trỏ vào hàmSửa đổi biến qua con trỏVí dụ kinh điển: hoán đổiTruyền mảng vào hàmÔn tập: đối số con trỏ hàm3Mảng ký tự và chuỗi
Chuỗi dưới dạng mảng charKý tự kết thúc nullNhập chuỗi bằng scanfDùng strlen()Dùng strcpy()Dùng strcat()Dùng strcmp()Ôn tập: các hàm xử lý chuỗi cơ bản6Quản lý bộ nhớ
Bộ nhớ ngăn xếp và bộ nhớ heapCấp phát động với malloc()Dùng sizeof() để cấp phátKiểm tra lỗi cấp phátGiải phóng bộ nhớ với free()Cấp phát với calloc()Ôn tập: Mảng động9Dự án: Nhập thông tin liên hệ đơn giản
Định nghĩa struct ContactHàm tạo liên hệTự luyện tập: Trình biên dịch C online