xuat(int a[10]) hoàn toàn tương đương với xuat(int *a), tức đối số là biến con trỏ, do đó khi printf phải thêm dấu * để chuyển thành giá trị để in.
vì a là mảng ( là 1 chuổi ô nhó liên tiếp nhau, mặt định a là ô nhớ đầu tiên == a[0]) khi truyền mảng vào hàm thức chất là truyền địa chỉ của ô nhớ đầu tiên trong mảng, còn n là biến thông thường, xuat(int n) hoàn toàn khác với xuat(int *n).
mảng a trong main là nơi ta khai báo, mặt định trong main() lúc này là biến giá trị thông thường, nếu ta khai báo trong hàm xuat() mảng a[10] này thì trong hàm xuất nó mặt định là biến giá trị, khi printf không thêm dấu * gì hết, mà dùng a[i], chứ không được phép dùng a++
Cho 1 mảng int a[10];
Thì a thôi, sẽ là con trỏ hằng trỏ vào vị trí a[0].
a++ sẽ hiểu là thay đổi con trỏ, trỏ vào vị trí khác a[0] (tùy theo số lần chạy qua bước ++ mà thành a[1], a[2],...)
Con trỏ hằng, nghĩa là không thay đổi mà trỏ sang chỗ khác được.
Do vậy, đoạn code trong hàm main bị lỗi.
Tuy nhiên, khi int a[10] để vào tham số của hàm, thì a là 1 biến con trỏ mới, hoàn toàn là con trỏ động (tương đương *a), trỏ vào cái vùng bộ nhớ gốc lúc gọi hàm.
Lúc này, con trỏ a không còn là con trỏ hằng nữa, nên có thể thay đổi vị trí trỏ được, nên a++ chạy tốt.
lấy ví dụ:
======================
void xuat(int a[10],int n)
{
for(int i=0;i<n;i++) printf("%d",*(a++));
}
void main()
{
int b[10];
xuat(b,10);// trong main gọi hàm xuất bên trên
}
===================
Wednesday, January 21, 2015
Subscribe to:
Post Comments (Atom)
Popular Posts
-
Thêm một mục dự báo thời tiết vào blog chắc chắn sẽ làm blog của bạn trông pro hơn rất nhiều . Đây là một số code chèn dự báo thời tiết và...
-
Bài Giải #include <stdio.h> #include <conio.h> #include <math.h> int main () { int n; float AS,AM,a; int s=0; float m=1...
-
lập trình tìm các bộ số pitago | lập trình c/c++. Một tam giác vuông có thể có tất cả các cạnh là các số nguyên. Tập của ba số nguyên của ...
-
Phần mềm Emu8086 là phần mềm cho phép mô phỏng hoạt động của vi xử lý 8086 bao gồm các câu lệnh cơ bản của 8086, xử lý ngắt mềm, giao tiếp v...
-
Để liệt kê các chỉnh hợp không lặp chập k của tập S = {1,2,3,.., n} , ta có thể đưa về liệt kê các cấu hình x[1,..,k] trong đó xi thuộc tập ...
-
Sưu tầm: Cho một số nguyên dương n<=30 , hay tìm tất cả các cách phân tích số n thành tổng của các số nguyên dương, các cách phân tích là...
-
Viết chương trình nhập vào số nguyên dương h (2<h<23), sau đó in ra các tam giác có chiều cao là h.viết hàm in các tam giác có chiều c...
-
1. Helloworld Đề bài: Viết chương trình hiển thị ra màn hình dòng chữ Hello, World! Ý tưởng: Code: #include int main() /* my first progra...
-
viết chương trình c chuyển đổi hệ đếm nhị phân, bát phân, thập lục phân . DEC,BIN,HEX,OCT. Viết chương trình in bảng của các số từ 1 đến ...
0 comments:
Post a Comment