1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng kỹ thuật lập trình – chương 2 quản lý bộ nhớ

32 15 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 32
Dung lượng 854,58 KB

Nội dung

.c om cu u du o ng th an co ng Chương 2: Quản lý nhớ CuuDuongThanCong.com https://fb.com/tailieudientucntt Biến: tên biến, vùng nhớ giá trị biến c om • Mỗi biến C có tên giá trị tương ứng Khi biến khai báo, vùng nhớ máy tính cấp ng phát để lưu giá trị biến Kích thước vùng nhớ phu thuộc an co kiểu biến, ví dụ byte cho kiểu int ng th int x = 10; du o • Khi lệnh thực hiện, trình biên dịch thiết lập để cu u byte vùng nhớ lưu giá trị 10 • Phép tốn & trả địa x, nghĩa địa ô nhớ vùng nhớ lưu trữ giá trị x CuuDuongThanCong.com https://fb.com/tailieudientucntt Biến: tên biến, vùng nhớ giá trị biến c om • Mỗi biến C có tên giá trị tương ứng Khi biến khai báo, vùng nhớ máy tính cấp ng phát để lưu giá trị biến Kích thước vùng nhớ phu thuộc an co kiểu biến, ví dụ byte cho kiểu int ng th int x = 10; du o • Khi lệnh thực hiện, trình biên dịch thiết lập để cu u byte vùng nhớ lưu giá trị 10 • Phép tốn & trả địa x, nghĩa địa ô nhớ vùng nhớ lưu trữ giá trị x CuuDuongThanCong.com https://fb.com/tailieudientucntt Biến: tên biến, vùng nhớ giá trị biến Tên biến x tham chiếu đến vị trí vùng nhớ 65329 c om Giá trị lưu vùng nhớ an 65325 65324 co Địa vị trí vùng nhớ ng 10 cu u du o ng th • int x = 10; • x biểu diễn tên biến (e.g an assigned name for a memory location ) • &x biểu diễn địa nhớ đầu tiền thuộc vùng nhớ x, tức 65325 • *(&x) or x biểu diễn giá trị lưu vùng nhớ x, tức 10 CuuDuongThanCong.com https://fb.com/tailieudientucntt Chương trình ví dụ cu u du o ng th an co ng c om #include int main() { int x = 10; printf("Value of x is %d\n",x); printf("Address of x in Hex is %p\n",&x); printf("Address of x in decimal is %lu\n",&x); printf("Value at address of x is %d\n",*(&x)); return 0; } Value of x is 10 Address of x in Hex is 0061FF0C Address of x in decimal is 6422284 Value at address of x is 10 CuuDuongThanCong.com https://fb.com/tailieudientucntt Khái niệm trỏ c om • Con trỏ biến chứa địa vùng nhớ ng biến khác an co • Cú pháp chung khai báo biến trỏ du o ng th data_type* ptr_name; • Ký hiệu '*’ thơng báo cho trình biên dịch cu u ptr_name biến trỏ data_type định trỏ trỏ tới địa vùng nhớ biến kiểu data_type CuuDuongThanCong.com https://fb.com/tailieudientucntt Tham chiếu ngược (dereference) biến trỏ c om ▪ Chúng ta “tham chiếu ngược" trỏ, nghĩa lấy giá trị biến mà trỏ trỏ vào an co ng cách dùng pháp toán ‘*’, chẳng hạn *ptr cu u du o ng th ▪ Do đó, *ptr có giá trị 10, 10 giá trị x CuuDuongThanCong.com https://fb.com/tailieudientucntt Ví dụ trỏ c om int x = 10; int *p = &x; an co ng Nếu trỏ p giữ địa biến a, ta nói p trỏ tới biến a ng th *p biểu diễn giá trị lưu địa p u du o *p gọi “tham chiếu ngược” trỏ p cu • Con trỏ dùng để lấy địa biến trỏ vào, đồng thời lấy giá trị biến CuuDuongThanCong.com https://fb.com/tailieudientucntt Con trỏ co ng c om int x = 10; int *ptr; ptr = &x; ng th an 65329 x du o Tên biến 10 65324 ptr 65320 65325 *ptr cu u Tên biến trỏ 65325 CuuDuongThanCong.com https://fb.com/tailieudientucntt .c om Biến trỏ co an th du o int *p; 10 10 Con trỏ int *p; p khai báo trỏ int p = &a; p giữ giá trị địa a, i.e.65325 *p biểu diễn giá trị lưu p, ie.10 int b = *p; b có giá trị 10 *p = 20; a có giá trị 20 ng Biến int x = 10; &x biểu diễn địa x x biểu diễn giá trị lưu địa 65325 &x 65324 ng 65329 cu u *p = 10; // this is not correct 10 CuuDuongThanCong.com https://fb.com/tailieudientucntt Con trỏ mảng cu u du o ng th an co ng c om Tuy cần ý a nên khơng thể dùng câu lệnh gán hay tốn tử tăng, giảm a++; • Xét trỏ: int *pa; pa = &a[0]; Khi pa trỏ vào phần tử thứ mảng pa +1 trỏ vào phần tử thứ mảng *(pa+i) nội dung a[i] 18 CuuDuongThanCong.com https://fb.com/tailieudientucntt Con trỏ xâu cu u du o ng th an co ng c om • Ta có char tinhthanh[30] =“Da Lat”; • Tương đương : char *tinhthanh; tinhthanh=“Da lat”; Hoặc: char *tinhthanh =“Da lat”; • Ngồi thao tác xâu tương tự mảng *(tinhthanh+3) = “l” • Chú ý : với xâu thường khơng thể gán trực tiếp dịng thứ 19 CuuDuongThanCong.com https://fb.com/tailieudientucntt Mảng trỏ c om • Con trỏ loại liệu nên ta tạo mảng phần tử trỏ theo dạng thức ng *[số phần tử]; th an co Ví dụ: char *ds[10]; ▫ ds mảng gồm 10 phần tử, phần tử du o ng trỏ kiểu char, dùng để lưu trữ 10 xâu ký tự cu u • Cũng có thẻ khởi tạo trực tiếp giá trị khai báo char * ma[10] = {“mot”,”hai”,”ba” }; 20 CuuDuongThanCong.com https://fb.com/tailieudientucntt ... %d\n",*ptr); CuuDuongThanCong.com Value of x is 10 Address of x is 6 422 284 Value of pointer ptr is 6 422 284 Address of pointer ptr is 6 422 280 Ptr pointing value is 10 https://fb.com/tailieudientucntt... https://fb.com/tailieudientucntt Biến: tên biến, vùng nhớ giá trị biến Tên biến x tham chiếu đến vị trí vùng nhớ 65 329 c om Giá trị lưu vùng nhớ an 65 325 65 324 co Địa vị trí vùng nhớ ng 10 cu u du o ng th • int x... i.e.65 325 *p biểu diễn giá trị lưu p, ie.10 int b = *p; b có giá trị 10 *p = 20 ; a có giá trị 20 ng Biến int x = 10; &x biểu diễn địa x x biểu diễn giá trị lưu địa 65 325 &x 65 324 ng 65 329 cu u

Ngày đăng: 08/07/2021, 22:24