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
Đối số mảng truyền cho hàm - con trỏ
Related Posts:
code c++ phần mềm split and join file part,001,002code c++ phần mềm split and join file part,001,002 #include<stdio.h> #include<conio.h> #include<stdlib.h> #include<string.h> #include<Windows.h> void layten(char *duongdan,char *ten) { int d=… Read More
[opp c++] nhập xuất điểm trong tọa độ oxylâp trình oop c++ định nghĩa và nhập xuất điểm trong tọa độ oxy , định nghĩa lớp điểm theo hướng đối tượng c++.nhập xuất nạp chồng toán tử diem.h #pragma once #include<iostream> using namespace std; class diem { priv… Read More
phân tích 1 số nguyên ra thừa số nguyên tố //lập trình c phân tích một số nguyên ra thừa số nguyên tố #include<stdio.h> long snt(long n) { if(n<2)return 0; if(n==2) return 1; for(long i=2;i<n;i++) if(n%i==0)return 0; return 1; } void main() { long… Read More
Tính Giá Trị Biểu Thức Nhập Từ Bàn Phím //lập trình c tính giá trị của 1 biểu thức bất kỳ nhập từ bàn phím gồm các phép tính cộng, trừ, nhân, chia (+-/*). biểu thức nhập ở dạng chuỗi. giống máy tính bỏ túi casio #include<iostream> #include<string.h&… Read More
tạo lập đối tượng trong c++*tạo lập đối tượng Khai báo và tạo đối tượng: <tên lớp> <tên đối tượng>; Gọi hàm thành phần của lớp <tên đối tượng>.<tên hàm thành phần> (<danh sách các tham số nếu có>); <tên con trỏ đố… Read More