Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 22 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
22
Dung lượng
148,37 KB
Nội dung
TRẦN MINH THÁI Cập nhật: 02 tháng 04 năm 2015 Chương 3. Lập trình con trỏ #2 Nội dung !"#$ % & #3 Biến tĩnh và biến động '()*"+" %'*" ' , (-.#/01- %'*"*0234" 5#"'*6"7" 589:*8;"<= *0 %#/189"!>"***0 #4 Địa chỉ của biến ?6"@#'"A ?' )B@' C-@' DE'F1898BG#-.H1-"6/I'*.8/@'( $J<J.F:#KJJ'I1-L@'F8 J1M"KJJ J #5 Địa chỉ của biến %JN %JO %JP %JQ 5-L'H 6/@ 'H %JNRR %JNRN %JNRO %JNRP 5-L' 6/@ ' S.,* THU U #6 Địa chỉ của biến 5-L@'66 #0"JVHW7'1(X"- 0 "JI0=I*Y=IZ :J1-L@' [' S., VW 2 H\]U TJ\NR^U TV_`H\aHb_I[HWU TV_`J\aHcI[JWU 3 K t quế ả Dia chi cua bien x = 0014FC00 Dia chi cua bien y = 0014FBF4 #7 Biến con trỏ %' #'1)X1-L@6XBI($G7J # 1-L@EG*)' d )Be??U S., eHU TeU f:J"-@ e??U #8 Con trỏ - Ví dụ VW 2 eHIJU TeIU J\NRU \NQ^U H\[JU \[U TV_CH\ab_IeHWU TV_C\aT_IeWU 3 Lấy địa chỉ của biến y gán vào px Lấy giá trị của con trỏ px Kết quả Gia tri cua px = 10 Gia tri cua pa = 14.5 #9 Con trỏ - Ví dụ VW 2 eHIJU TeIU J\NRU \NQ^U H\[JU \[U TV_`J\aHb_I[JWU TV_`H\aHb_IHWU TV_`\aHb_I[WU TV_`\aHb_IWU 3 Dia chi cua bien y = d7f7dc Dia chi cua bien px = d7f7dc Dia chi cua bien b = d7f7c4 Dia chi cua bien pa = d7f7c4 #10 Sử dụng biến con trỏ VW 2 eHU TV_g"H_WU TV_a_IHWU TV_CH\a_IeHWU 3 !!!Chưa cấp phát bộ nhớ trước khi sử dụng [...]... (*Ham)(int, int) = ChuVi; int p = Tinh(a, b, Ham); printf("Chu vi cua hcn = %d", p); } Bài tập #21 1 Viết chương trình gồm c c ch c năng c bản xử lý mảng một chiều số nguyên dùng con trỏ 2 3 Viết chương trình gồm c c ch c năng c bản xử lý ma trận số nguyên dùng con trỏ Dùng kỹ thuật con trỏ hàm, viết chương trình tính tổng, hiệu, tích và thương c a hai phân số phụ thu c vào người dùng chọn ch c năng nào... biến con trỏ #11 void ViDu4() { C p phát bộ nhớ cho px int *px; px = (int *)calloc(1, sizeof(int)); printf("Nhap vao gia tri cho con tro px: "); scanf("%d", px); printf("Gia tri cua px = %d", *px); } Kết quả Nhap vao gia tri cho con tro px: 16 Gia tri cua px = 16 C p phát và giải phóng vùng nhớ #12 Biến con trỏ phải đư c cấp phát vùng nhớ trư c khi sử dụng Cách 1: dùng calloc //khai báo con trỏ p... / /c p phát 100 ô nhớ mỗi ô chiếm 2bytes p=(int *) calloc (100, sizeof (int)); C p phát và giải phóng vùng nhớ # 13 Biến con trỏ phải đư c cấp phát vùng nhớ trư c khi sử dụng Cách 2: dùng malloc //Khai báo con trỏ px int *px; / /C p phát 100 ô nhớ kiểu int cho con trỏ px px = (int *) malloc (100); Sau khi sử dụng xong thì giải phóng vùng nhớ bằng hàm free free(p) ; // giải phóng vùng nhớ cho con trỏ. .. p C p phát và giải phóng vùng nhớ #14 void main() { int *px; px = (int *)malloc(1); printf("Nhap vao gia tri cho con tro px: "); scanf("%d", px); printf("Gia tri cua px = %d", *px); free(px); } Giải phóng con trỏ px Con trỏ và mảng một chiều #15 int a[7]; int *px; px = a; //px trỏ tới phần tử thứ 0 px = px + 4; //px trỏ tới phần tử thứ 4 a[0] px a[1] a[2] a [3] a[4] a[5] a[6] Con trỏ và mảng một chiều... XuatMang(a, n); free(a); } Con trỏ hàm #18 Khai báo: (*Tên hàm)(tham số); VD: int *Tong(int a, int b); Thích hợp cho vi c tùy chọn (switch) gọi th c hiện trong danh sách c c hàm Con trỏ hàm #19 int ChuVi(int a, int b) { return (a + b) * 2; } int DienTich(int a, int b) { return a*b; } int Tinh(int a, int b, int (*Ham)(int, int)) { int kq = (*Ham)(a, b); return kq; } Con trỏ hàm #20 void main() {... main() scanf("%d", a+i); { int *a, n=4; } Ho c &a[i] } a=(int *)malloc(n); NhapMang(a, n); XuatMang(a, n); void XuatMang(int *a, int n) free(a); { } for(int i=0; i . dụ VW 2 eHIJU TeIU JNRU NQ^U H[JU [U TV_`JaHb_I[JWU TV_`HaHb_IHWU TV_`aHb_I[WU TV_`aHb_IWU 3 Dia chi cua bien y = d7f7dc Dia chi cua bien px = d7f7dc Dia chi cua bien b = d7f 7c4 Dia chi cua bien pa = d7f 7c4 #10 Sử dụng biến con trỏ VW 2 eHU TV_g"H_WU TV_a_IHWU TV _C Ha_IeHWU 3 !!!Chưa. chiều gD"VeIW 2 TVRUoUnnW 2 TV_ga_IWU TV_a_InWU 3 3 pD"VeIW 2 TVRUoUnnW 2 TV_ab_IeVnWWU 3 3 void main() { int *a, n=4; a=(int *)malloc(n); NhapMang(a, n); XuatMang(a, n); free(a); } Ho c &a[i] Ho c a[i] #17 Thay đổi kích thư c của con trỏ đã c p phát d realloc(tên con. nhớ %'!189:7"/8/*i," C ch 1: dng calloc //khai báo con trỏ p int *p; / /c p phát 100 ô nhớ mỗi ô chiếm 2bytes p=(int *) calloc (100, sizeof (int)); # 13 C p phát và giải phóng vùng nhớ %'!189:7"/8/*i," C ch