Khái niệm con trỏ Một con trỏ là một biến chứa địa chỉ ô nhớ.. Con trỏ và địa chỉLưu ý: Khi gán địa chỉ của 1 biến cho 1 biến con trỏ, mọi sự thay đổi trên nội dung ô nhớ con trỏ chỉ t
Trang 2Khái niệm con trỏ
Một con trỏ là một biến chứa địa chỉ ô nhớ Địa
chỉ này là vị trí của một đối tượng khác trong bộ nhớ.
Trang 3Con trỏ và địa chỉ
Phép lấy địa chỉ của 1 biến
Kí hiệu: &
Cách sử dụng: & <Tên biến>
Ví dụ: int *pi= & a; // pi giữ địa chỉ của các biến nguyên a
Phép toán lấy giá trị tại một địa chỉ mà một con trỏ đang trỏ tới
pi = & a; //pi giữ địa chỉ của biến a
*pi là giá trị của a và bằng 10
Trang 6Con trỏ và địa chỉ
Lưu ý:
Khi gán địa chỉ của 1 biến cho 1 biến con trỏ, mọi sự
thay đổi trên nội dung ô nhớ con trỏ chỉ tới sẽ làm giá trị của biến thay đổi theo.
Khi ta khai báo:
int a=10;int *pi;
pi= & a; // pi giữ địa chỉ biến a
*pi=*pi +2;
Trang 7*pb=30;
printf("\nGia tri cua bien a sau khi thay doi la %d",a);
printf("\nGia tri cua bien b sau khi thay doi la %d",b);
getch();
}
Trang 8C
Trang 10Khai báo con trỏ
Sử dụng từ khóa typedef
Ví dụ
typedef <kiểu dữ liệu> * <tên kiểu con trỏ>;
<tên kiểu con trỏ> <tên biến con trỏ>;
typedef int *pint;
int *p1;
pint p2, p3;
Trang 12Con trỏ và mảng 1 chiều
Giữa mảng và con trỏ có một sự liên hệ rất chặt chẽ:
– Những phần tử của mảng được xác định bằng chỉ số trong
mảng và cũng có thể được xác định qua biến con trỏ
– Tên của một mảng tương đương với địa chỉ phần tử đầu
tiên của nó, tương tự một con trỏ tương đương với địa chỉ của phần tử đầu tiên mà nó trỏ tới.
Kiểu mảng Ví dụ Kiểu Con trỏ Ví dụ
&<Tên mảng>[0] &A[0] hoặc A <Tên con trỏ > p
Trang 15return t;
} int main() {
int a[20],k,i;
nhapmang(a,k);
xuatmang(a,k);
printf("tong la:%d",tong(a,k)); getch();
}
Trang 17printf("\nNoi dung cua con tro p
ban dau la\n");
for(i=0;i<20;i++)
printf("%d",*(p+i));
for(i=0;i<20;i++) *(p+i)=*(p+i)+1;
printf("\nNoi dung cua mang a sau khi tang len 1 la\n");
for(i=0;i<4;i++) for(j=0;j<5;j++) printf("%d",a[i][j]);
printf("\nNoi dung cua con tro p sau khi tang len 1 la\n");
for(i=0;i<20;i++) printf("%d",*(p+i));
getch();
}
Trang 18Các phép toán trên con trỏ
Có 4 phép toán liên quan tới con trỏ và địa chỉ:
- Phép gán
- Phép tăng giảm địa chỉ
- Phép truy cập bộ nhớ
- Phép so sánh
Trang 19Các phép toán trên con trỏ
Trang 20Các phép toán trên con trỏ
Trang 21Các phép toán trên con trỏ
Trang 22Mảng con trỏ
Mỗi biến con trỏ là một biến đơn Ta có thể tạo
mảng của các con trỏ với mỗi phần tử của mảng
là một con trỏ.
Cú pháp:
< Kiểu dữ liệu > *Tên mảng con trỏ [ số phần tủ ];
Trang 24Cấp phát bộ nhớ động
Cấp phát vùng nhớ cho biến con trỏ:
Các hàm: malloc(), calloc(), free()…
Trang 25Cấp phát bộ nhớ động
Giải phóng vùng nhớ cho biến con trỏ
Trang 26Con trỏ và tham số hình thức của hàm
Trang 27Con trỏ và tham số hình thức của hàm
Ví dụ viết hàm hoán vị:
Trang 28Con trỏ và tham số hình thức của hàm
Trang 29C