Thắc mắc về con trỏ: cấp phát bộ nhớ, kiểu con trỏ và phép tăng giảm địa chỉ

Xin chào mọi người, em là sinh viên năm 1, em đang học về con trỏ trong C và có 1 số thắc mắc sau đây, mong các bác giúp đỡ:
1. Khi tạo 1 biến con trỏ trong C thì máy sẽ cấp phát bộ nhớ như thế nào cho con trỏ( 2 bít, 4 bít ?)
2. Tại sao con trỏ lại cần nhiều kiểu con trỏ (Vì em nghĩ con trỏ là để lưu trữ địa chỉ, mà địa chỉ thì chỉ là 1 biến số nguyên ?)
3. Phép tăng giảm địa chỉ hoạt động như thế nào ạ? (Vd là px+1 thì theo cú pháp thì nó chỉ lấy địa chỉ +1 thôi, nhưng em lại thấy nó +4, +2, +1 tuỳ kiểu của con trỏ, vậy là máy sẽ thay số 1 thành 4,2,1 hay là thế nào ạ)
Em xin cảm ơn ạ

  1. Tùy kiến trúc máy. PC/lap thì 4 hay 8 byte ứng với x86 hay x64.
  2. Như vậy sẽ tránh được việc gán con trỏ khác kiểu cho nhau, hoặc gán sai kiểu struct S* p = &((int) i) gây lỗi nghiêm trọng.
  3. Dựa vào kích thước của kiểu nó đang trỏ vào. Khi hình dung một dãy ô nhớ liên tiếp thì công thức sẽ là p + i = (char*) p + sizeof(*p) * i.
3 Likes

Em chào anh, cảm ơn anh rất nhiều khi đã giúp đỡ em, nhưng anh có thể bỏ thêm một chút thời gian để giải thích rõ hơn không ạ:

  1. Tại sao con trỏ lại liên quan đến kiến trúc máy ạ( Em có thể học cái này từ đâu)
  2. Vậy là các kiểu con trỏ sẽ được quyết định trước dựa theo ngôn ngữ lập trình phải không ạ. Và cái hàm struct này nó được lưu trữ ở đâu ạ( Trong file .h hay là được lập trình sẵn trong mọi compiler)

Câu hỏi ngoài lề: Anh ơi, em đang học C bằng sách Kỹ Thuật lập trình C của thầy ất ạ, ngoài quyển này về c thì để đủ trình độ “Nhập môn lập trình” cần phải học thêm cái gì ạ
Cảm ơn anh rất nhiều vì đã giúp đỡ ạ.

  1. Kiến trúc máy(khả năng quản lý ram của os) => serch thêm đọc sẽ chi tiết
  2. Kiểu => qui ước ngôn ngữ, struct là từ khóa => qui ước ngôn ngữ(cái này chắc phải học lên cao hơn trình độ dh)

struct được cấu thành từ các kiểu cơ bản như mảng, con trỏ và kiểu nguyên (lưu ý string không phải là kiểu cơ bản trong C/C++). struct có thể là thành phần của struct khác. Nó là một phần không thể tách rời của C :smiley:

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?